bool PxfMain(Util::String _CmdLine) { char t_title[512]; char t_pxftitle[] = "PXF Engine"; int t_fps = 0; Pxf::Graphics::WindowSpecifications* pWindowSpecs = new Pxf::Graphics::WindowSpecifications(); pWindowSpecs->Width = 720; pWindowSpecs->Height = 480; pWindowSpecs->ColorBits = 8; pWindowSpecs->AlphaBits = 0; pWindowSpecs->DepthBits = 24; pWindowSpecs->StencilBits = 0; pWindowSpecs->VerticalSync = false; pWindowSpecs->FSAASamples = 0; pWindowSpecs->Fullscreen = false; pWindowSpecs->Resizeable = false; Pxf::Engine engine; Graphics::Device* pDevice = engine.CreateDevice(Graphics::EOpenGL2); Graphics::Window* pWindow = pDevice->OpenWindow(pWindowSpecs); Input::Input* pInput = engine.CreateInput(pDevice, pWindow); pInput->ShowCursor(true); GUIHandler* pGUI = new GUIHandler(pDevice); pGUI->AddScript("data/guitest.lua", &Pxf::Math::Vec4i(0,0,300,pWindowSpecs->Height)); // Fix this? viewport seems to be set from bottom left corner? // Setup viewport and orthogonal projection pDevice->SetViewport(0, 0, pWindowSpecs->Width / 2.0f, pWindowSpecs->Height); Math::Mat4 t_ortho = Math::Mat4::Ortho(0, pWindowSpecs->Width / 2.0f, pWindowSpecs->Height, 0, 0, 1); pDevice->SetProjection(&t_ortho); // Test font /*SimpleFont *_fonttest = new SimpleFont(pDevice); _fonttest->Load("data/alterebro_pixel.ttf", 13.0f, 128); _fonttest->AddTextCentered("Hey, some text! :)", Math::Vec3f(0,10,0));*/ while (!pInput->IsKeyDown(Input::ESC) && pWindow->IsOpen()) { // Some OGL stuff that hasn't been moved to the device yet pDevice->SetViewport(0, 0, pWindowSpecs->Width, pWindowSpecs->Height); pDevice->SetProjection(&t_ortho); glClearColor(.3, .3, .3, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glEnable(GL_TEXTURE_2D); //glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); //glEnable(GL_BLEND); // Update input pInput->Update(); Math::Vec2i mousepos_i; Math::Vec2f mousepos_f; pInput->GetMousePos(&mousepos_i.x, &mousepos_i.y); mousepos_f.x = mousepos_i.x; mousepos_f.y = mousepos_i.y; // GUI glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); pGUI->Update(&mousepos_f, pInput->IsButtonDown(Pxf::Input::MOUSE_LEFT), 1.0f); pGUI->Draw(); //glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR); //glEnable(GL_BLEND); //_fonttest->Draw(); //glTranslatef(cosf(t_honk) * 200.0f, sinf(t_honk) * 200.0f, 0); /*pDevice->BindTexture(pTexture); pQBatch->Draw(); */ // Swap buffers pWindow->Swap(); // Update title with FPS if (t_fps != pWindow->GetFPS()) { t_fps = pWindow->GetFPS(); sprintf(t_title, "%s - %s - FPS: %i", t_pxftitle, Graphics::DeviceTypeName(pDevice->GetDeviceType()), t_fps); pWindow->SetTitle(t_title); } } pDevice->CloseWindow(); engine.DestroyDevice(pDevice); return true; }
bool PxfMain(Util::String _CmdLine) { char t_title[512]; char t_pxftitle[] = "PXF Engine"; int t_fps = 0; Timer t; Pxf::Graphics::WindowSpecifications* pWindowSpecs = new Pxf::Graphics::WindowSpecifications(); pWindowSpecs->Width = 720; pWindowSpecs->Height = 480; pWindowSpecs->ColorBits = 8; pWindowSpecs->AlphaBits = 0; pWindowSpecs->DepthBits = 24; pWindowSpecs->StencilBits = 0; pWindowSpecs->VerticalSync = false; pWindowSpecs->FSAASamples = 0; pWindowSpecs->Fullscreen = false; pWindowSpecs->Resizeable = false; Pxf::Engine engine; Graphics::Device* pDevice = engine.CreateDevice(Graphics::EOpenGL2); Graphics::Window* pWindow = pDevice->OpenWindow(pWindowSpecs); Input::Input* pInput = engine.CreateInput(pDevice, pWindow); Resource::ResourceManager* resourceManager = new Resource::ResourceManager(); Resource::Image* image = resourceManager->Acquire<Resource::Image>("test.png"); // Load some texture glEnable(GL_TEXTURE_2D); Graphics::Texture* pTexture = pDevice->CreateTexture("test.png"); pDevice->BindTexture(pTexture); // Lets create some quads, but render them in "reverse" order via SetDepth(...). Graphics::QuadBatch* pQBatch = pDevice->CreateQuadBatch(256); pQBatch->Reset(); pQBatch->SetTextureSubset(0.0f, 0.0f, 32.0f / pTexture->GetWidth(), 32.0f / pTexture->GetHeight()); pQBatch->SetDepth(0.5f); pQBatch->SetColor(1.0f, 0.0f, 0.0f, 1.0f); pQBatch->AddCentered(200, 200, 50, 50); pQBatch->SetDepth(0.1f); pQBatch->SetColor(0.0f, 1.0f, 0.0f, 1.0f); pQBatch->AddCentered(225, 225, 50, 50); // Setup viewport and orthogonal projection pDevice->SetViewport(0, 0, pWindowSpecs->Width, pWindowSpecs->Height); Math::Mat4 t_ortho = Math::Mat4::Ortho(0, pWindowSpecs->Width, pWindowSpecs->Height, 0, -1000, 1000); pDevice->SetProjection(&t_ortho); // InterleavedVertexBuffer MyVertex data[24]; // Front data[0] = MyVertex(Vec3f(-0.5f, -0.5f, 0.5f), Vec4f(0, 0, 1, 1.0f)); data[1] = MyVertex(Vec3f(0.5f, -0.5f, 0.5f), Vec4f(0, 0, 1, 1.0f)); data[2] = MyVertex(Vec3f(0.5f, 0.5f, 0.5f), Vec4f(0, 0, 1, 1.0f)); data[3] = MyVertex(Vec3f(-0.5f, 0.5f, 0.5f), Vec4f(0, 0, 1, 1.0f)); // Back data[4] = MyVertex(Vec3f(-0.5f, -0.5f, -0.5f), Vec4f(1, 0, 1, 1.0f)); data[5] = MyVertex(Vec3f(-0.5f, 0.5f, -0.5f), Vec4f(1, 0, 1, 1.0f)); data[6] = MyVertex(Vec3f(0.5f, 0.5f, -0.5f), Vec4f(1, 0, 1, 1.0f)); data[7] = MyVertex(Vec3f(0.5f, -0.5f, -0.5f), Vec4f(1, 0, 1, 1.0f)); // Top data[8] = MyVertex(Vec3f(-0.5f, 0.5f, 0.5f), Vec4f(0, 1, 1, 1.0f)); data[9] = MyVertex(Vec3f(0.5f, 0.5f, 0.5f), Vec4f(0, 1, 1, 1.0f)); data[10] = MyVertex(Vec3f(0.5f, 0.5f, -0.5), Vec4f(0, 1, 1, 1.0f)); data[11] = MyVertex(Vec3f(-0.5f, 0.5f, -0.5f), Vec4f(0, 1, 1, 1.0f)); // Left data[12] = MyVertex(Vec3f(-0.5f, -0.5f, 0.5f), Vec4f(1, 1, 1, 1.0f)); data[13] = MyVertex(Vec3f(-0.5f, 0.5f, 0.5f), Vec4f(1, 1, 1, 1.0f)); data[14] = MyVertex(Vec3f(-0.5f, 0.5f, -0.5f), Vec4f(1, 1, 1, 1.0f)); data[15] = MyVertex(Vec3f(-0.5f, -0.5f, -0.5f), Vec4f(1, 1, 1, 1.0f)); // Right data[16] = MyVertex(Vec3f(0.5f, -0.5f, -0.5f), Vec4f(1, 0, 1, 1.0f)); data[17] = MyVertex(Vec3f(0.5f, 0.5f, -0.5f), Vec4f(1, 0, 1, 1.0f)); data[18] = MyVertex(Vec3f(0.5f, 0.5f, 0.5f), Vec4f(1, 0, 1, 1.0f)); data[19] = MyVertex(Vec3f(0.5f, -0.5f, 0.5f), Vec4f(1, 0, 1, 1.0f)); // Bottom data[20] = MyVertex(Vec3f(-0.5f, -0.5f, 0.5f), Vec4f(0, 1, 1, 1.0f)); data[21] = MyVertex(Vec3f(-0.5f, -0.5f, -0.5f), Vec4f(0, 1, 1, 1.0f)); data[22] = MyVertex(Vec3f(0.5f, -0.5f, -0.5f), Vec4f(0, 1, 1, 1.0f)); data[23] = MyVertex(Vec3f(0.5f, -0.5f, 0.5f), Vec4f(0, 1, 1, 1.0f)); VertexBuffer* pIBuffs[4]; pIBuffs[0] = CreateBuffer(pDevice, VB_LOCATION_SYS); pIBuffs[1] = CreateBuffer(pDevice, VB_LOCATION_GPU); pIBuffs[2] = CreateBuffer(pDevice, VB_LOCATION_SYS); pIBuffs[3] = CreateBuffer(pDevice, VB_LOCATION_GPU); MyVertex* mapped_data = (MyVertex*)pIBuffs[0]->MapData(Graphics::VB_ACCESS_WRITE_ONLY); for(unsigned i = 24; i--;) mapped_data[i] = data[i]; pIBuffs[0]->UnmapData(); mapped_data = (MyVertex*)pIBuffs[1]->MapData(Graphics::VB_ACCESS_WRITE_ONLY); for(unsigned i = 24; i--;) mapped_data[i] = data[i]; pIBuffs[1]->UnmapData(); pIBuffs[2]->UpdateData(data, sizeof(data), 0); pIBuffs[3]->UpdateData(data, sizeof(data), 0); float t_honk = 0.0f; t.Start(); while (!pInput->IsKeyDown(Input::ESC) && pWindow->IsOpen()) { // Update input pInput->Update(); // Some OGL stuff that hasn't been moved to the device yet glClearColor((((int)(t_honk * 255)) % 255) / 255.0f, .3, .3, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); t_honk += 0.004; glEnable(GL_DEPTH_TEST); glBindTexture(GL_TEXTURE_2D, 0); for(int i = 0; i < 4; i++) { glLoadIdentity(); glTranslatef(50 + 100 * i, 100, 0); glRotatef(t_honk*80, 0, 1, 1); glScalef(50, 50, 50); pDevice->DrawBuffer(pIBuffs[i]); } //pDevice->BindTexture(pTexture); //pQBatch->Draw(); // Swap buffers pWindow->Swap(); // Update title with FPS if (t_fps != pWindow->GetFPS()) { t_fps = pWindow->GetFPS(); sprintf(t_title, "%s - %s - FPS: %i", t_pxftitle, Graphics::DeviceTypeName(pDevice->GetDeviceType()), t_fps); pWindow->SetTitle(t_title); } } t.Stop(); pDevice->CloseWindow(); engine.DestroyDevice(pDevice); Message("HONK", "Number of ms passed: %d", t.Interval()); return true; }