text:
Apps and Co
AO Trauma Orthogeriatrics
With the Education App "AO Trauma Orthogeriatrics", surgeons and healthcare professionals can test and learn their medical know-how. Neofonie Mobile has designed, developed and enhanced the app for the AO Foundation for iOS and Android.
App relaunch
Learning app for the treatment of people with fractures
The AO Foundation promotes knowledge transfer among surgeons and the interactive community of healthcare professionals. Especially in the specialties of trauma, spine, craniomaxillofacial and veterinary surgery, the know-how is to be trained by means of educational and consulting offers. Neofonie Mobile was commissioned to develop the Education App AO Trauma Orthogeriatric as early as 2013. In the following years several smaller and larger updates were carried out. In 2019, Neofonie Mobile comprehensively updated the app and took it to a new level.
TECHNICAL PLATFORMS & PARTNERS
AO Trauma Orthogeriatric App
The AO Trauma Orthogeriatric App is an education app that provides guidance in the treatment of patients with fractures. The content is presented through a series of question-answer paths, providing the user with supporting information during diagnosis, planning and execution of surgical procedures. The offer is primarily aimed at surgeons and trainees, but is also suitable for physicians and specialists in other health care fields. The app is available for smartphones and tablets running on iOS or Android.
Cross platform app based on HTML5
The "AO Trauma Orthogeriatric" app was designed from the outset as a hybrid app based on HTML5. This offers the advantage of using native features of the smartphone or tablet, such as connectivity status and access to file systems, as well as the flexibility of a web application. The code base is also equally usable for iOS and Android.
Focus on content
The interface design was developed in close cooperation with the client and focuses on the content to easily guide the user through the respective learning mode. The user selects one of the learning modules already on the start screen and follows the steps after selection. The design is based on a cross-platform approach and is created for smartphones in portrait format and for tablets in portrait and landscape format. Individual adaptations to the respective operating system have been almost completely eliminated.
The learning modules are the focus
The app's concept is based on four learning modules: Osteoporosis, Delirium, Anticoagulation and Pain Management, which are already presented on the introductory page. Yes/No answer pages and list views guide the user through the respective learning content. A navigation, an information page and a glossary of references and abbreviations have also been integrated.
Optically and technically up to date
In 2019, the app underwent a comprehensive relaunch. Besides the integration of the new branding of the AO Foundation, a new learning unit for fall prevention was added. Furthermore, content has been updated and the technology has been upgraded to the current "Cordova" version 8.1.1.
Learning app for medical professionals
Cross-platform design
Simple question-answer paths
Hybrid app based on HTML5
Development and support since 2013
Well over 10,000 installations and satisfied customers speak for themselves. The app's rating is between 4-5 out of 5 points and the AO Foundation also sticks to the app. The hybrid app continues to function stably even after 8 years and supports medical professionals in testing and improving their knowledge.
AO Foundation
The AO Foundation is a medically-led non-profit organization led by an international group of surgeons specializing in the treatment of trauma and musculoskeletal disorders. It was founded in 1958 by 13 visionary surgeons.
To AO Foundation
IWW Institut
Apotheke vor Ort
HUK-COBURG Travel App
Hama Point of Sale App
meinbezirk espresso
BCG Serious Gaming
Kältehilfe-App
Rademacher App
Berliner Wohnhilfe
Stefan Gerstmeier
COO Neofonie Mobile & Neofonie Polska
+ 49 30 24627-284
Cookie from Microsoft for recording heat maps and session recordings.


For all its insular quirks, for all its internecine disagreements and flamewars and fragmented subschisms, I'm proud to be part of the online genre fiction scene, because every now and again it gets together to do good things for the world beyond its borders. Point in case: the Genre For Japan auctions. Originally conceived by Amanda Rutter, review blogger of Floor-to-Ceiling Books, and joined by an impressive roster of writers, editors and publishers from across the UK (and beyond), it's all about auctioning off rare books and other literary prizes – such as Tuckerizations or detailed one-on-one writing critiques – to collect money to give to the Red Cross Japanese Tsunami Appeal. The complete list of 137 lots (!) can be seen here; you have until the end of the week to make your bids.
Of course, if the bids are already too high (or if there's nothing there that takes your fancy) you could just donate directly, if you haven't already. Given these troubled times, there are hundreds of good causes in need of support, and in an ideal world such causes would be flooded with money while the missile silos of the world echoed emptily with the footfalls of carefree and complacent spiders… but they don't and they aren't, and pockets are empty everywhere, so if all you've got is a moment to reflect on the misfortunes of others, that's better than nothing at all.


Fiat 500 USA Forum > Fiat 500 Forums > Questions about the Fiat 500 > Hey, aren't they supposed to rotate your tires?
View Full Version : Hey, aren't they supposed to rotate your tires?
This morning I noticed on my receipt that it only said that they'd changed the oil and filter.
I can't remember when it says to rotate the tires. I always did it every 5,000 because they'd just do it on my old car for free and was part of the tire hazard warranty.
On the 500 I can't recall what the interval is but I swear it should have been done by now. I am a few miles short of 8,900. I don't think they did it the first time, either (at 4,700).
According to the maintenance schedule, I think, the tires are supposed to be rotated at 8,000 miles intervals. That being said, since you were basically AT 8,000 miles AND it has been a year with the tires in the same positions they should have rotated them. Also if you have a sunroof, they should have lubed the rails for it at this visit (1 year) also.
They rotated my tires and it only has 2300 miles on it, after 1 year. I know they rotated them because of the difference in air pressure between front and back;it's now backwards.
I know they rotated them because of the difference in air pressure between front and back;it's now backwards.
I'm not familiar with Jaguar, but the 2007 Mercedes Benz C230 I leased had different size tires on the front and rear and therefore could not be rotated.
Guess I'm going to have to pay a place to do it then.
I have had more problems with rotating tires than not rotating tires. So I haven't rotated tires in some 20 years.
M Dealerships has no clue what the scheduled maintenance is supposed to be on the 500. They ask for the milage when I make the appointment, I tell them it' s for the scheduled maintenance - and then they just do whaterver they always do for Chryslers.
That's exactly correct !! So. As not to waste your time, you should have a list of maintainance items needed.
This list probably would not be that long.
I am very interested in hearing some of the issues, I am not sure I want to rotate the tires either.
I have had problems with vibration from the differing tire wear patterns.
And I find the tires are pretty much all worn out at about the same time, so rotating would not have changed anything.
I think the general original gist of my post was them not doing certain things that were listed they'd do in the manual. If they say to rotate the tires, I'm going to do it. If I get noises because of that it is up to them to rectify it because the car is under warranty. I still need to call and fight with them about the sunroof and cabin filters but since I'm going in again at 13k or so they *will* do it then.
FWIW I did have the tires done - and the car realigned because this is Potholeville - at 8500 (I am at 10125 now) and it has been fine. The car is a Pop with Firestones.
McKevitt in Berkeley has the full maintenance schedule printed out at the front desk of the office. I don't know yet if they stick to that schedule but will find out in a few months.
Tires and tire problems are not covered under warranty.
No, but if I got noises and irregular wear because of the malfunctioning or failure of a related part such as part of the suspension or steering they would be, given that I'm still within the 12/12.
Yes, but you can have a perfect suspension and still have tire issues as the front and rear suspensions are different, the loads and different, and the dynamics are different.
So you end up with a vibration or noise and your only recourse is to buy new tires. For what?
IMO rotating tires went out with greasing front axle bearings and drum brakes.
That could not be more false for us @ Benson CDJ and Benson Fiat. We are family owned and I can tell you for sure that makes a HUGE difference in the attitude of employees. Certainly not every customer leaves happy, but everything we do is in the customers best interest. I do realize that not everyone on board at every dealership sees things the same way I do, but I would certainly rather have a customer telling 5 people about what we did right rather than same said customer telling 100 people about what we did wrong. No disrespect intended at all but not every dealership out there is a 'stealership'...just food for thought.


So what will Microsoft's (MSFT) next quarry be?
Facebook? AOL? A series of small Web 2.0 stars like Digg (probably too late, as Google is already first in line there again), Spot Runner and others?
That is, if there will be one after the Yahoo (YHOO) takeover debacle.
Or, if the software giant somehow screws up the courage and, despite the constant rejection, goes back again to try to scoop up Yahoo.
In a post Friday, BoomTown made the case that Microsoft was not going to do that, burned too many times and ready to move on for various reasons (regulatory problems, poisoned relations and sheer pique).
No, indeed, and that's why it should watch carefully as the price of Yahoo's stock drops and what happens between Yahoo and billionaire activist investor Carl Icahn.
Icahn is waging a proxy war against Yahoo, which should come to a head at the company's board meeting on Aug. 1.
So if Ballmer is serious about competing strongly in the search-ad market, he must keep Yahoo in mind, no matter the checkered history of their dealings so far.
And even, as several sources tell me, swallow the bile it must have had after Microsoft thought it won the search deal with Yahoo, at least until a June 8th meeting in which Yahoo offered the whole company or nothing.
Yahoo then turned around and signed with Microsoft archrival Google (GOOG) last week.
The big head here, of course, is Platforms and Services Division President Kevin Johnson (pictured here), one of the big proponents of the various deals with Yahoo.
Now, he and others at Microsoft have to be scrambling for alternative schemes to figure out a way to stay in the game.
While some think Microsoft should stick more to its knitting and buy enterprise companies like SAP, Ballmer and Johnson have been adamant that online ads will be its next great business.
And, given the growth there, being No. 2 in the space is not the worst place to be.
In any case, many expect a bold step from Microsoft in the space now.
The obvious move is a splashy bid for Facebook. As before, Microsoft continues to send subtle signals of interest, now via third parties, to the social-networking site.
As much as many at Facebook would like the sell out for a price tag in the $10 billion to $15 billion range, CEO and Founder Mark Zuckerberg remains uninterested and seems willing to continue resisting the pressure (see BoomTown's take on that here).
As for AOL–it's a more likely scenario, given it would allow Microsoft to double down in the display space with the Time Warner (TWX) division's Platform A ad unit and also gain some other strong properties (such as in video search with Truveo, with widgetmaker Userplane, as well as in instant messaging).
It would also probably like to give the boot to Google, which now serves up AOL search ads (and which also holds a 5% stake in AOL).
Microsoft has been very close to buying AOL before, once even considering spinning its Internet properties and AOL into a newco, so it does know the lay of the land there.
And Time Warner CEO Jeff Bewkes is casting about for solutions to unlocking the value of the interactive unit, which has always needed to run free from the mother ship.


New Executive Beachfront Cottage - 3 Bedroom.
Book a boat rental on your vacation and enjoy the fishing on Georgian Bay.
Our family-run 4-star, 4-season Ontario Cottage Resort is a premier Ontario fishing and vacation destination for family holidays, couples getaways, and fishing vacations on Georgian Bay. Pleasant Cove is nestled within the prestigious 30,000 Islands of Georgian Bay, one of the best fresh water boating and fishing locations in the world. Discover spectacular landscapes, time-worn rock faces, diverse habitats, great fishing, and the rugged natural beauty of the Canadian Shield.
Just 2 1/2 hours north of Toronto, 4 1/2 hours north of Niagara Falls, here at Pleasant Cove Resort you will encounter excellence in 1,2,3 & 4 bedroom well appointed accommodations, a full complement of recreational fun and outstanding hospitality, rooted in four decades of devoted family ownership.
Whether paddling or motoring, fishing or exploring, swimming or just kicking back to enjoy sensational sunsets is your passion, Pleasant Cove Resort has everything you need for the perfect family vacation, weekend getaway, fishing trip or romantic retreat. Fully winterized, our well equipped lakefront housekeeping cottages provide comfortable year-round accommodations on Georgian Bay.
FISH WHERE THE PROS FISH!
Our Georgian Bay fishing resort in Pointe au Baril, Ontario offers some of the best fishing to be had anywhere. The local waters of Georgian Bay and the 30,000 Islands are ideal for anglers, both novice and seasoned fishing pros alike. Here at Pleasant Cove, we have everything you need for a fabulous fishing getaway. Book one of our value priced fishing packages that include comfortable cottage accommodations and motorized fishing boat to enjoy an Ontario fishing vacation at its finest.
We've had the extreme pleasure of successfully hosting some of Canada's most revered Fishing Professionals here at Pleasant Cove Resort. To mention a few, Mike Miller and Pete Bowman from TV's Fish'n Canada show; Bob and Wayne Izumi from TV's Real Fishing show and Lonnie King, writer for Ontario Out of Doors magazine.
The recurring comments coming from all of these fishing experts is how much they enjoyed the great variety and abundance of fish like Pike, Walleye, Bass and Musky, while surrounded by the beauty and diversity of Georgian Bays spectacular 30,000 Islands. We are very proud, to have received acclamations like "...excellent amenities for all ages and a great variety of fish" and "Some of the greatest fishing right at your back door." So, whether you consider yourself a sport or recreational fishing enthusiast we know that your experience while staying at Pleasant Cove will rank right up there with the Pros!
While staying at Pleasant Cove Resort enjoy the many area attractions and events available throughout the seasons. Awe inspiring 30,000 Island Cruises, Festival of the Sound, 18 Hole Golf Courses, Arts on The Bay, Artisans, Theatre, Bobby Orr Hockey Hall of Fame, Science North, just to name a few. There is so much to see and do on the east shore of Georgian Bay. In Georgian Bay County and the township of The Archipelago in the Parry Sound District, visitors will find charming little communities and breathtaking scenery, along with all the fun activities that make an Ontario cottage vacation special.
Vacationing at an Ontario housekeeping cottage resort is a wonderful way to spend time with family and friends. Our peaceful and quiet cottage resort, set amongst the magnificent scenery of Georgian Bay, one of the most popular vacation destinations in the world, offers plenty of family-friendly activities and things to do. Whether for a weekend escape or a weeklong vacation, our modern lakefront cottages will provide a comfortable and private home away from home.
EXPECT PERFECTION... it's in our nature.
Season after season, year after year, Pleasant Cove has proudly welcomed thousands of vacationing friends, families, colleagues and couples. Our guests travel from near and far for a Georgian Bay resort vacation like no other.
Some come to our Georgian Bay cottage resort to experience our many available onsite activities including sport-fishing, family recreational fishing, boating, swimming, fitness room, hot tub, steam sauna, tennis, basketball, pedal boats, canoes, kayaks, snowmobiling, cross country skiing, ice fishing, nature walks and more.
Some come to escape the hustle of city life and embrace the peaceful and serene atmosphere here, and take in the clean fresh air fresh and magnificent scenery. Others come simply to lay back and enjoy the soulful cry of the majestic loon, accompanied by the tranquil lull of waves washing ashore and the quiet whisper of wind through the trees.
These are the sounds of Pleasant Cove. And they call for you.
Welcome to Pointe au Baril and the 30,000 Islands of Georgian Bay, one of the most beautiful places in the world. The crystalline waters and vast swaths of majestic wilderness that surround Pleasant Cove Resort rivals even the most scenic locales. Here on the shores of Georgian Bay in one of Canada's most iconic and admired geographic areas, Pleasant Cove Resort offers an Ontario cottage country vacation like no other. Rich in Canadian history and geological and ecological significance, fabled places like the North Channel, Manitoulin Island, Rainbow Country, and the 30,000 Islands are yours to discover.
While you enjoy your Georgian Bay vacation with us at Pleasant Cove, we invite you to explore this most captivating Ontario tourist region. You will marvel at its magnificent beauty and broad diversity of landscape, terrain and wildlife. Its diversity makes Georgian Bay and Rainbow Country a favorite with not only boaters and fisherman, but artists and photographers was well. Pleasant Cove Resort provides the idea base for whatever activity that draws you here, be it fishing, canoeing, photography, painting, or simply relaxing by the waters of Georgian Bay.
At Pleasant Cove Resort, we offer a wide variety of modern housekeeping cottage accommodations. Our Ultra and Deluxe one bedroom waterfront cottages and studio suites are ideal for singles and couples. For family vacations, girl's getaway weekends or fishing retreats with the guys, we have 2 bedroom Ultra Deluxe cottages and chalets, as well as 3 bedroom lakefront efficiency cottages. Our spacious 4 bedroom Ultra Deluxe cottage that sleeps up to 8 people is perfect for larger families or parties of up to four couples. To accommodations larger groups, such as several families for a family reunion, we can help you select a variety of cottages to suit your group's needs.


MoneyGram Team Wins at the PYMNTS Innovator Awards.
Our MoneyGram family celebrated two prestigious gold awards recognizing the company's commitment to innovation at the 2016 PYMNTS Innovator Awards ceremony at Harvard University.
The PYMNTS Innovator Awards honor the innovators that are impacting where the payments, commerce and tech ecosystem is headed over the next year, two years, five years and beyond. They are considered one of the most prestigious recognitions in the payments industry.
Our revolutionary kiosk solutions create a customer-first solution to provide a quick, intuitive and secure experience for consumers. Key features include guest and repeat user experience, multiple languages and minimal data entry for the customer.
Our new state-of-the-art online platform gives users a simple, fast way to send money anywhere, from anywhere, at any time, and always securely.
Join our team of innovators. Explore our open jobs today.


text:
#include "FE_MeshRenderData.h"

bool FE_MeshLightData::compare(const FE_MeshLightData &other){
    bool output = true;
    output = output && position == other.position;
    output = output && rotation == other.rotation;
    output = output && color == other.color;

    output = output && (fabs(range- other.range) < FE_EPSILON);
    output = output && (fabs(fov- other.fov) < FE_EPSILON);
    output = output && (fabs(this_type- other.this_type) < FE_EPSILON);
    output = output && (fabs(value- other.value) < FE_EPSILON);
    return output;
}

void FE_MeshLightData::assignValue(const FE_MeshLightData& other){
    this->position = other.position;
    this->rotation = other.rotation;
    this->color = other.color;
    this->range = other.range;
    this->fov = other.fov;
    this->value = other.value;
    this->this_type = other.this_type;
 }

FE_MeshRenderData::FE_MeshRenderData()
{
    //ctor
}

FE_MeshRenderData::~FE_MeshRenderData()
{
    //dtor
}

/** This method is run everytime
  * the vertex/polygon layout is changed
  * and calculates the new layout
  */

void FE_MeshRenderData::getVertices(FE_Mesh* mesh, string mat_name){

    if(mesh->getVertexGroup(mat_name)->getNumPolygons() == this->vertices_size) return;

    FE_MeshVertexData data;
    data.offset = 0;
    data.ib_offset = 0;
    /// make a temporary index vector to copy vertices to the ID buffer
    /*vector<GLuint> temporary_ib_data;
    //size_t global_offset = 0;
    ///calculate vertex layout
    for(size_t i = 0; i < mesh->getVertexGroup(mat_name)->getNumPolygons(); i++){
        for(auto o : {0, 1, 2}){

            int id_found = 0;
            auto v = mesh->vertices[mesh->getVertexGroup(mat_name)->polygons[i]*3+o];
            bool found = false;
            for(size_t x=0; x < temporary_ib_data.size(); x++){

                if(mesh->vertices[temporary_ib_data[x]]->equivalents(v)){

                    id_found = x;
                    found = true;
                    //global_offset++;
                    break;
                }
            }
            if(!found){
                id_found = v->n;
                temporary_ib_data.push_back(mesh->vertices[mesh->getVertexGroup(mat_name)->polygons[i]*3+o]->n);
            }
            data.index_buffer.push_back(id_found);
        }
    }*/

    for(size_t i = 0; i < mesh->getVertexGroup(mat_name)->getNumPolygons(); i++){
        for(auto o : {0, 1, 2}){

            auto v = mesh->vertices[mesh->getVertexGroup(mat_name)->polygons[i]*3+o];
            //bool found = false;

            /*for(size_t x = 0; x< vertex_indices.size(); x++){
                if(mesh->vertices[vertex_indices[x]]->equivalents(v)){

                    data.index_buffer.push_back(v->n);
                    found = true;
                    break;
                }
                else if(mesh->vertices[vertex_indices[x]]->n == v->n){

                    data.index_buffer.push_back(v->n);
                    found = true;
                    break;
                }

            }
            if(!found){

             data.index_buffer.push_back(v->n);
            }*/
            data.index_buffer.push_back(v->n);
        }
    }
    vector<GLuint> actual_vertex_indices;
    GLuint CONSTANT_SIZE = *max_element(data.index_buffer.begin(), data.index_buffer.end());
    //CONSTANT_SIZE = mesh->vertices.size();
    actual_vertex_indices.reserve(CONSTANT_SIZE);
    cout << CONSTANT_SIZE << endl;
    for(GLuint x=0; x <= CONSTANT_SIZE; x++){
        /// upload vertex data
        FE_Vertex vertex;
        for(auto i : mesh->vertices){
            if(i->n ==x)
               vertex = *i;
        }
        data.vertices.push_back(vertex.x);
        data.vertices.push_back(vertex.y);
        data.vertices.push_back(vertex.z);

        /// upload vertex normal data
        data.vertices.push_back(vertex.normalx);
        data.vertices.push_back(vertex.normaly);
        data.vertices.push_back(vertex.normalz);

        /// upload uv coordinates
        if(vertex.getUVMapNames().size()>0){
            data.vertices.push_back(vertex.getUVMap(vertex.getUVMapNames()[0])->getUV().u);
            data.vertices.push_back(vertex.getUVMap(vertex.getUVMapNames()[0])->getUV().v);
        }
        else{
            data.vertices.push_back(1.0f);
            data.vertices.push_back(1.0f);
        }
    }
    if(!created){
        //for(auto x : vertex_indices)
        //writeToLog(to_string(x) + " ");
        //writeToLog("\n");
    }

    //obj_data.index_buffer = index_buffer;
    this->obj_data.ib_offset = 0;
    //this->obj_data.index_buffer.push_back()
    this->obj_data = data;

}

/** This method is run everytime
  * the vertex/polygon layout is changed
  * and calculates the new layout
  */

void FE_MeshRenderData::getObjectData(FE_Scene* scenea, FE_Mesh* objecta){

    vector<FE_MeshLightData> local_light_data;

    vector<GLfloat> output;
    /// dont change the model matrix if unnecessary
    obj_data.light_offset = 0;

    model_mat = objecta->getModelMatrix();
    for(auto x : model_mat.toArray())
        output.push_back(x);
    obj_data.light_offset = 0;

    if(objecta->lights.size() > 16) return;

    for(size_t x=0; x< objecta->lights.size(); x++){

        FE_Light light = *scenea->getLight(objecta->lights[x]);

        /// copy all relevant data
        local_light_data.push_back(FE_MeshLightData());

        local_light_data.back().position = light.getPos();
        local_light_data.back().rotation = light.getRotEuler();
        local_light_data.back().color = light.getColor();

        local_light_data.back().range = light.getRange();
        local_light_data.back().fov = light.getFOV();
        local_light_data.back().value = light.getValue();

        GLfloat light_type = 0.0f;
        if(light.getType() == "POINT")
            light_type = 1.0f;
        else if(light.getType() == "SUN")
            light_type = 2.0f;
        else if(light.getType() == "AMBIENT")
            light_type = 3.0f;
        else if(light.getType() == "SPOT")
            light_type = 4.0f;

        local_light_data.back().this_type = light_type;
        this->light_data[objecta->lights[x]].this_type = light_type;
        if(local_light_data.back().compare(this->light_data[objecta->lights[x]])){

            output.push_back(local_light_data.back().position.x);
            output.push_back(local_light_data.back().position.y);
            output.push_back(local_light_data.back().position.z);
            output.push_back(local_light_data.back().position.w);

            output.push_back(local_light_data.back().rotation.x);
            output.push_back(local_light_data.back().rotation.y);
            output.push_back(local_light_data.back().rotation.z);
            output.push_back(local_light_data.back().rotation.w);

            output.push_back(local_light_data.back().color.x);
            output.push_back(local_light_data.back().color.y);
            output.push_back(local_light_data.back().color.z);
            output.push_back(local_light_data.back().color.w);

            output.push_back(local_light_data.back().range);
            output.push_back(local_light_data.back().fov);
            output.push_back(local_light_data.back().value);
            output.push_back(local_light_data.back().this_type);
            this->light_data[objecta->lights[x]].assignValue(local_light_data.back());
        }
    }
    while(output.size() < 16+16*16)
        output.push_back(0.0f);
    //writeToLog(to_string(output.size()));
    this->obj_data.light_data = output;
    //cout << obj_data.light_data.size() << endl;
}

/** This method is run every frame
  * and stores every change in the buffers
  */

void FE_MeshRenderData::update(FE_GPU_Thread* thread/*, string obj, size_t id*/){

    this->gpu_names = "_FE_" + this->name + "_FE_" + this->mat + "_FE_";
    if(this->obj_data.vertices.size() == 0 && this->obj_data.index_buffer.size() == 0 && this->obj_data.light_data.size()==0) return;

    if(!created){
        FE_GPU_CommandQueue* cmd_queue = thread->createCommandQueue(gpu_names + "new_vertices");
        /*for(size_t x=0; x < obj_data.vertices.size(); x+=8){
        writeToLog(to_string(obj_data.vertices[x+0]) + " ");
        writeToLog(to_string(obj_data.vertices[x+1]) + " ");
        writeToLog(to_string(obj_data.vertices[x+2]) + " \n");

        writeToLog(to_string(obj_data.vertices[x+3]) + " ");
        writeToLog(to_string(obj_data.vertices[x+4]) + " ");
        writeToLog(to_string(obj_data.vertices[x+5]) + " \n");

        writeToLog(to_string(obj_data.vertices[x+6]) + " ");
        writeToLog(to_string(obj_data.vertices[x+7]) + " \n");

        }
        for(size_t x=0; x < obj_data.index_buffer.size(); x+=3){
            writeToLog(to_string(obj_data.index_buffer[x+0]) + " ");
            writeToLog(to_string(obj_data.index_buffer[x+1]) + " ");
            writeToLog(to_string(obj_data.index_buffer[x+2]) + " \n");
        }*/
        /// stores all vertices
        cmd_queue->createVertexBuffer(gpu_names);
        cmd_queue->setVertexBufferMemory(gpu_names, this->obj_data.vertices.size(), FE_GPU_STATIC);
        //for(auto x : obj_data)
        //cout << << endl;
        cmd_queue->setVertexBufferData(gpu_names, this->obj_data.vertices, 0);

        /// stores the index buffer (set here)
        /// and the layout of the vertex shader (not set here)
        cmd_queue->createVertexLayout(gpu_names);
        vector<FE_GPU_VertexLayoutInput> inputs;
        FE_GPU_VertexLayoutInput input;
        input.name = gpu_names;
        // position
        /// amount is the goddamn number (of GLfloats [4 bytes]) used in each f**king vertex shader instance in the GPU
        input.amount = 3;
            /// offset is the freaking initial offset (in GLfloats [4 bytes]) from the start of the buffer sh**
        input.offset = 0;
        /// stride is the motheryacking difference (in GLfloats [4 bytes]) between each fu**ng instance of vertex attribute
        input.stride = 8;
        inputs.push_back(input);

        /// i can use the same FE_GPU_VertexLayoutInput since std::vector makes MOTHERYACKING COPIES OF THE INSTANCES
        /// that said in other to prevent further goddamn questions on dat sh**
        // normals
        input.amount = 3;
        input.offset = 3;
        input.stride = 8;
        inputs.push_back(input);

        // uvs
        input.amount = 2;
        input.offset = 6;
        input.stride = 8;
        inputs.push_back(input);

        /// initialize the vertex layout + index buffer
        cmd_queue->setVertexLayoutFormat(gpu_names, inputs);
        cmd_queue->setVLIndexBufferMemory(gpu_names, this->obj_data.index_buffer.size(), FE_GPU_STATIC);
        cmd_queue->setVLIndexBufferData(gpu_names, this->obj_data.index_buffer, 0);

        /// initialize the lights and position layout
        /// the size will NEVER change ... EVER
        cmd_queue->createUniform(gpu_names);
        cmd_queue->setUniformMemory(gpu_names, obj_data.light_data.size(), FE_GPU_STREAM);
        cmd_queue->setUniformData(gpu_names, obj_data.light_data, 0);

        cmd_queue->optimize();
        thread->submit(gpu_names + "new_vertices");

        /// store the buffer to reset the size automatically if vertices change
        this->vertices_size = obj_data.vertices.size();
        this->ib_size = obj_data.index_buffer.size();
        created = true;
        //writeToLog("NOTHING IS IMPOSSIBLE");
    }
    else{

        thread->deleteCommandQueue("_FE_" + this->name + "_FE_" + mat + "vertices");
        //cout << " " << endl;
        FE_GPU_CommandQueue* cmd_queue = thread->createCommandQueue("_FE_" + this->name + "_FE_" + mat + "vertices");
        cmd_queue->Clear();
        /// change size of vertex buffer
        if(this->vertices_size != this->obj_data.vertices.size() && this->obj_data.vertices.size() != 0 && this->obj_data.offset == 0)
            cmd_queue->setVertexBufferMemory(gpu_names, this->obj_data.vertices.size(), FE_GPU_STATIC);

        /// change size of index buffer
        if(this->ib_size != this->obj_data.index_buffer.size() && this->obj_data.index_buffer.size() != 0 && this->obj_data.ib_offset == 0)
            cmd_queue->setVLIndexBufferMemory(gpu_names, this->obj_data.index_buffer.size(), FE_GPU_STATIC);

        /******************************/
        /// update data of vertex buffer
        if(this->obj_data.vertices.size() != 0)
            cmd_queue->setVertexBufferData(gpu_names, this->obj_data.vertices, this->obj_data.offset);

        /// update data of index buffer
        if(this->obj_data.index_buffer.size() != 0)
            cmd_queue->setVLIndexBufferData(gpu_names, this->obj_data.index_buffer, this->obj_data.ib_offset);

        ///update data of index buffer
        if(this->obj_data.light_data.size() != 0)
            cmd_queue->setUniformData(gpu_names, obj_data.light_data, 0);

        cmd_queue->optimize();
        thread->submit("_FE_" + this->name + "_FE_" + mat + "vertices");
    }
    this->obj_data.light_data.clear();
    this->obj_data.vertices.clear();
    this->obj_data.index_buffer.clear();
}

void FE_MeshRenderData::drawDummy(FE_GPU_Thread* thread){
    /// simple draw with elementary shader
    FE_GPU_CommandQueue* cmd_queue = thread->createCommandQueue("_FE_" + this->name + "_FE_" + mat + "drawDummy");
    cmd_queue->drawInstances("_FE_dummy_FE_", gpu_names, 0, 0, (GLuint)this->ib_size);
    cmd_queue->optimize();
    thread->submit("_FE_" + this->name + "_FE_" + mat + "drawDummy");

}

void FE_MeshRenderData::draw(FE_GPU_CommandQueue* cmd_queue){

    cmd_queue->setUniformState(gpu_names, 2, 0, 0);

    cmd_queue->drawInstances("_FE_" + this->mat + "_FE_", gpu_names, 0, 0, (GLuint)this->ib_size);

}
/****************************************/
// MATERIAL RENDER DATA
/****************************************/
FE_MaterialData::FE_MaterialData(){

}
FE_MaterialData::~FE_MaterialData(){

}

void FE_MaterialData::init(FE_GPU_Thread* thread, FE_Material material){

    FE_GPU_CommandQueue* cmd_queue = thread->createCommandQueue(name + "b");
    cmd_queue->createVertexBuffer(this->name);
    cmd_queue->createVertexLayout(this->name);
    thread->submit(name + "b");

}

void FE_MaterialData::update(FE_GPU_Thread* thread){

    if(!(this->updated_mat == old_mat)){
        old_mat = updated_mat;
        //writeToLog("DOING IT");
        thread->deleteCommandQueue("_FE_" + this->name + "_FE_" + "create_material");
        FE_GPU_CommandQueue* cmd_queue = thread->createCommandQueue("_FE_" + this->name + "_FE_" + "create_material");

        cmd_queue->createUniform("_FE_" + this->name + "_FE_" + "uniform");
        if(!created){
            cmd_queue->setUniformMemory("_FE_" + this->name + "_FE_" + "uniform", old_mat.getMaterialData().size(), FE_GPU_DYNAMIC);
            created = true;
        }

        cmd_queue->setUniformData("_FE_" + this->name + "_FE_" + "uniform", old_mat.getMaterialData(), 0);

        chooseProgram(cmd_queue);
        cmd_queue->optimize();
        thread->submit("_FE_" + this->name + "_FE_" + "create_material");

    }

}
void FE_MaterialData::chooseProgram(FE_GPU_CommandQueue* cmd_queue){

    ///cmd_queue->deleteProgram("_FE_" + this->mat + "_FE_");
    cmd_queue->createProgram("_FE_" + this->name + "_FE_");

    /// set shader sources
    FE_GPU_Shader shader;
    shader.type = FE_GPU_VERTEX_SHADER;
    shader.data = string(Shader(

    struct FE_MeshLightData{
        vec4 position;
        vec4 rotation;
        vec4 color;
        vec4 general;
    };

    in vec3 fe_position;
    in vec3 fe_normals;
    in vec2 fe_uvs;

    out vec4 pos;
    out vec4 normals;
    out vec2 uvs;

    layout(std140) uniform FE_SceneData{
        mat4 perspective;
        mat4 view;
    };

    layout(std140) uniform FE_Object{
        mat4 model_matrix;
        FE_MeshLightData lights[16];
    };

    void main(){
        pos = transpose(view)*transpose(model_matrix)*vec4(fe_position, 1.0);
        normals = normalize(transpose(model_matrix)*vec4(fe_normals, 1.0));
        uvs = fe_uvs;
        vec4 final_position = perspective*transpose(view)*transpose(model_matrix)*vec4(fe_position, 1.0);

        gl_Position = final_position;

    }));

    cmd_queue->setProgramVS("_FE_" + this->name + "_FE_", shader);

    shader.type = FE_GPU_PIXEL_SHADER;
    shader.data = string(Shader(

    precision mediump float;

    in vec4 pos;
    in vec4 normals;
    in vec2 uvs;

    struct FE_MeshLightData{
        vec4 position;
        vec4 rotation;
        vec4 color;
        vec4 general;
    };
    layout(std140) uniform FE_SceneData{
        mat4 perspective;
        mat4 view;
    };

    layout(std140) uniform FE_Object{
        mat4 model_matrix;
        FE_MeshLightData lights[16];
    };

    layout (std140) uniform FE_Material{
        vec4 diffuse_color;
        vec4 specular_color;
        vec4 general_data;
        vec4 translucency;
        vec4 illuminosity;
    };

    out vec4 fragColor;

    vec3 shading(in vec3 light, in vec3 pos, in vec3 normal,in vec3 diffuse_intensity,in float light_type, in float specular_intensity){

        if(light_type > 0.5f && light_type < 1.0f){
            /// point light
            vec3 s = normalize(light-pos);
            vec3 v = normalize(-pos);

            //vec3 r = reflect(-s, tnorm);
            float sDotN = max( dot(normal,s), 0.0f);

            vec3 diffuse =  diffuse_intensity*sDotN;
            vec3 specular = vec3(0.0f);

            if(sDotN>0.0f){
                float outputa = pow(max(dot(normalize(v+s), normal), 0.0f), specular_intensity);
                //if(outputa < 0.8f) specular = vec3(0.2f);
                //else
                specular = vec3(outputa);

            }
            return diffuse+specular;
        }
        else if (light_type > 1.0f && light_type < 2.0f){

            /// directional light (sun)
            vec3 n = normalize(light);
            vec3 v = normalize(-pos);

            float sDotN = max( dot(normal, n), 0.0f);

            vec3 diffuse =  diffuse_intensity*sDotN;
            vec3 specular = vec3(0.0f);

            if(sDotN>0.0f){
                float outputa = pow(max(dot(normalize(v+n), normal), 0.0f), specular_intensity);
                //if(outputa < 0.8f) specular = vec3(0.2f);
                //else
                specular = vec3(outputa);

            }
            return diffuse+specular;
        }
    }

    vec3 toVec3(vec4 inputa){
        return inputa.xyz;
    }

    void main(){
        //fragColor = vec4(1.0, 1.0, 1.0, 1.0);
        vec4 actual_output = vec4(0.0, 0.0, 0.0, 1.0);
        //actual_output = normals;
        //for(int i=0; i < 16; i++){
        //    actual_output += vec4(shading(toVec3(lights[i].position), toVec3(pos), toVec3(normals), toVec3(diffuse_color), general_data[2], 1.0), 0.0);
        //}
        actual_output += vec4(shading(toVec3(transpose(view)*vec4(0.0, 0.0, 15.0, 1.0)),
                                      toVec3(pos),
                                       toVec3(normals), vec3(1.0, 0.0, 0.0), 1.4, 5.0), 1.0);

        fragColor = actual_output;
    }));
    cmd_queue->setProgramFS("_FE_" + this->name + "_FE_", shader);
    cmd_queue->setupProgram("_FE_" + this->name + "_FE_");

    cmd_queue->setProgramUniformSlot("_FE_" + this->name + "_FE_", "FE_Object", 2);
    cmd_queue->setProgramUniformSlot("_FE_" + this->name + "_FE_", "FE_SceneData", 0);
    cmd_queue->setProgramUniformSlot("_FE_" + this->name + "_FE_", "FE_Material", 1);
}

void FE_MaterialData::draw(FE_GPU_Thread* thread){

    /// if meshes are not the same size
    /// recalculate the size
    if(meshes.size() != previous_mesh_size)
        thread->deleteCommandQueue("_FE_" + this->name + "_FE_" + "draw");
    previous_mesh_size = meshes.size();

    /// set material-wide state
    /// (material uniform)
    //cout << "DOING IT" << endl;
    FE_GPU_CommandQueue* cmd_queue = thread->createCommandQueue("_FE_" + this->name + "_FE_" + "draw");
    cmd_queue->setUniformState("_FE_" + name + "_FE_" + "uniform", 1, 0, 0);

    for(FE_MeshRenderData obje : this->meshes){

        /// set object-wide state
        /// (vertex buffer/layout + uniform)
        obje.draw(cmd_queue);
    }

    cmd_queue->optimize();
    thread->submit("_FE_" + this->name + "_FE_" + "draw");

}
void FE_MaterialData::destroy(FE_GPU_Thread* thread){

}

redpajama_set_name: RedPajamaGithub


text:
lifecenterforanewtomorrow.com
Question: Which Describes One Or More Reasons The Renaissance Began In Italy?
Who was the richest banker in Italy during the Renaissance?
What was Italy like during the Renaissance?
What are the 3 most important characteristics of the Italian Renaissance?
What is one reason why the Renaissance began in Italy?
What part of Italy did the Renaissance began?
What were the key characteristics of Italy during the Renaissance?
What did humanism focus on during the Renaissance?
What does Renaissance mean?
What are three reasons why the Renaissance began in Italy quizlet?
When did the Renaissance start in Italy?
Which of the following contributed to the birth of the Renaissance in Italy?
Who ruled Italy in the 1500s?
Who is known as the original Renaissance man?
What were the three advantages that caused the renaissance to start in Italy?
Why did the Renaissance began in Italy give two reasons?
Why did the Renaissance start in Italy quizlet?
What were the three reasons that the Renaissance began?
What conditions gave rise to the Italian Renaissance?
Giovanni di Micci de'MediciGiovanni di Micci de'Medici (1360-1429) was born into a relatively poor Florentine family and received only a nominal inheritance when his father died of the plague.
He founded the Medici Bank in 1397, which became the most successful bank in Florence by his death in 1429..
As a cultural movement, the Italian Renaissance affected only a small part of the population. Italy was the most urbanized region of Europe, but three quarters of the people were still rural peasants. For this section of the population, life remained essentially unchanged from the Middle Ages.
What are the three most important characteristics of the Italian Renaissance? Urban society, recover from 14th century disasters, and emphasized individual ability.
The Renaissance was a rebirth of ancient Greek and Roman thinking and styles, and both the Roman and Greek civilizations were Mediterranean cultures, as is Italy. The best single reason for Italy as the birthplace of the Renaissance was the concentration of wealth, power, and intellect in the Church.
FlorenceThe Renaissance is generally considered to have started in Florence, Italy around the years 1350 to 1400. The start of the Renaissance also was the end of the Middle Ages. One of the big changes in the Renaissance was in the basic way people thought about things.
What are the important characteristics of Italy during the Renaissance? Italy had a lot of economics and political things going on and people were getting better things than others. Italy was split into three social classes; the clergy, the nobility, and the peasants and townspeople.
The Humanism of the Renaissance. Humanism (the philosophy that people are rational beings) became quite popular during the Renaissance. The dignity and worth of the individual was emphasized. … Humanism and the humanities disciplines included studies in speaking, grammar, poetry, ethics and history.
Renaissance is a French word meaning "rebirth." It refers to a period in European civilization that was marked by a revival of Classical learning and wisdom.
What are the three reasons why the Renaissance began in Italy? Italy had several important cities, these cities included the class of merchants and bankers who were becoming wealthy and powerful, Italian artists in and scholars were inspired by the ruined buildings and other reminders of classical Rome.
14th centuryThe Renaissance began in the 14th century in Florence, Italy.
RENAISSANCE AND REFORMATIONQuestionAnswerWhich of the following contributed to the birth of the Renaissance in Italy?d. A wealthy merchant class who became patronsThe artists of the Renaissance focused on _______.a. Humans and everyday life37 more rows
The greatest Medicis were Cosimo who ruled from 1434 to 1464 and Lorenzo the Magnificent who ruled from 1469 to 1492. However, at the end of the 15th century, Italy fell prey to foreign powers.
Leonardo da VinciOne of the most famous people alive during this time was Leonardo da Vinci. He was most famous as a painter, but he was also a scientist, engineer and mathematician. Leonardo is called a "Renaissance man".
Italy had three advantages that made it the birthplace of the Renaissance: thriving cities, a wealthy merchant class, and the classical heritage of Greece and Rome.
Following are the reasons why the Renaissance first began in Italy: All the historical remains and relics of the Roman Empire were to be found in Italy. As a result many scholars and artists sought to dwell in Italy. … It broadened their vision and provided an impetus to Renaissance.
Terms in this set (5) Italy's location provided trade and wealth. The Renaissance needed the wealth of the Italian city-states. The Church spurs Renaissance achievements and art. … Italy was the center of Ancient Greek and Roman culture.
Give three reasons why the Renaissance began in Italy….Terms in this set (5)Humanism- A focus and study of anicent Greek and Roman texts and ideas.Secularism- Not having to do with religion, a focus on non-religious matters.Realism- An accurate potrayal of life and people, it shows life and people as they really are.
Historians have identified several causes for the emergence of the Renaissance following the Middle Ages, such as: increased interaction between different cultures, the rediscovery of ancient Greek and Roman texts, the emergence of humanism, different artistic and technological innovations, and the impacts of conflict …
Quick Answer: Which Is Better Amazon Prime Or Netflix Or Hotstar?
How can I watch Hotstar for free? To watch Hotstar
Is Understood A Verb?
Can I say understood? ' or 'Understood'
Quick Answer: What Paint To Use For Dutch Pour?
How much Floetrol do I add to acrylic paint?
Question: How Do I Contact Betty Crocker Company?
Why was Betty Crocker invented? The Washburn Crosby
Question: Does Petty Theft Ruin Your Life?
Is it hard to get a job with a petty theft charge?
Question: How Do I Know God'S Purpose For My Life?
How do I discover my self? 6 Steps to Discover Your
Question: What Is The Best ECU Tuning Software?
What is the best ECU programmer? CMD Flash is known
Question: Why Is Dithering Important?
How do you dither astrophotography? Constant Contact Use.
Question: Which Organs Use The Most Energy?
What organ burns the most calories? While the brain
Quick Answer: What Are The 2 Circuits?
What are the 2 types of circuits? There are two types
Did Great Britain Dominate The World?
Why did Britain give up India? One reason why the British
What Is The Perfect Photo?
How can I make my photo unique? Let'
What Makes A Face Aesthetically Pleasing?
What makes a face pretty? Faces that we deem attractive
© 2021 lifecenterforanewtomorrow.com

redpajama_set_name: RedPajamaCommonCrawl


Junk Removal San Antonio & Dumpster Rental Alternative | 1-800-GOT-JUNK?
Hi – I'm James Rossette, the Operations Manager of1-800-GOT-JUNK? San Antonio. I got into the junk removal business because I thought it was a crazy idea and saw a vision of success in this particular field. I really wanted to try something different, and it doesn't get more "unique" than junk removal.
1-800-GOT-JUNK? is really different. We're a well-oiled machine in the junk removal world, which means that our customers get treated well, and their junk gets handled responsibly. The biggest difference between 1-800-GOT-JUNK? and other junk removal services in San Antonio is our established brand and reputation for excellence.
What I like most about working with 1-800-GOT-JUNK? is the freedom to go out and explore our wonderful state see all parts of the town. Plus I love being out and about, meeting clients and just people in general.
I love living life to the fullest, and providing an excellent service to all of my customers. I can't wait to haul your junk away.