int main() { try { ImageLoaders::PNG loader; if (!loader.CanLoad("resources/logo.png")) { throw FatalException("Cannot load PNG images."); } Image* image = loader.Load("resources/logo.png"); WindowStyle style; style.title = U8("logo.png (") + image->GetWidth() + U8(", ") + image->GetHeight() + U8(")"); style.width = image->GetWidth(); style.height = image->GetHeight(); style.backgroundColor = Colors::black; style.resizable = false; Window window; window.Create(style); OpenGL::Context context; context.Create(&window); GL::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GL::Enable(GL_BLEND); GL::Enable(GL_ALPHA_TEST); GL::Enable(GL_TEXTURE_2D); UInt program = LoadShader(U8("resources/shader.vert"), U8("resources/shader.frag")); UInt box = MakeBox(); UInt texture; GL::GenTextures(1, &texture); GL::BindTexture(GL_TEXTURE_2D, texture); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); GL::TexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); GL::PixelStorei(GL_UNPACK_ALIGNMENT, 1); GL::TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->GetWidth(), image->GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image->GetData()); GL::BindTexture(GL_TEXTURE_2D, 0); Timer timer; Float32 hue = 0.0f; while (window.IsOpen()) { Timer::Sleep(1); hue = Math::Mod(hue + timer.GetDeltaTime() * 45, 360.0f); context.ClearColor(Color::MakeHSL(hue, 40, 255)); context.Viewport(0, 0, window.GetWidth(), window.GetHeight()); context.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT); GL::UseProgram(program); GL::UniformMatrix4fv(GL::GetUniformLocation(program, "orthoMatrix"), 1, false, Matrix::MakeOrtho(0, 1, 1, 0).GetData()); GL::UniformMatrix4fv(GL::GetUniformLocation(program, "modelMatrix"), 1, false, Matrix::Identity().GetData()); GL::Uniform1i(GL::GetUniformLocation(program, "texture"), 0); GL::ActiveTexture(GL_TEXTURE0); GL::BindTexture(GL_TEXTURE_2D, texture); GL::BindVertexArray(box); GL::DrawArrays(GL_QUADS, 0, 4); GL::BindVertexArray(0); GL::UseProgram(0); context.SwapBuffers(); Window::Update(); } } catch (Exception& e) { std::cout << e.what() << std::endl; std::cout << std::hex << "Error code: 0x" << e.unique << std::dec << " (decimal " << e.unique << ")" << std::endl; } }
int main() { try { Image image; image.Load("resources/jattabox.png"); WindowStyle style; style.title = U8("CGUL - 3D World"); style.size = UCoord32(640, 480); style.backgroundColor = Colors::black; style.resizable = true; Window window; window.Create(style); OpenGL::Context context; context.Create(&window); GL::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GL::Enable(GL_BLEND); GL::Enable(GL_ALPHA_TEST); GL::Enable(GL_TEXTURE_2D); GL::Enable(GL_DEPTH_TEST); GL::Enable(GL_CULL_FACE); glCullFace(GL_BACK); UIntN program = LoadShader(U8("resources/shader.vert"), U8("resources/shader.frag")); UIntN box = MakeBox(); UIntN texture; GL::GenTextures(1, &texture); GL::BindTexture(GL_TEXTURE_2D, texture); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GL::TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); GL::TexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); GL::PixelStorei(GL_UNPACK_ALIGNMENT, 1); GL::TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.GetWidth(), image.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.GetData< void >()); GL::BindTexture(GL_TEXTURE_2D, 0); Timer timer; Float32 hue = 0.0f; while (window.IsOpen()) { Float32 deltaTime = timer.GetDeltaTime(); Timer::Sleep(1); hue = Math::Mod(hue + deltaTime * 0.125f, 1.0f); context.ClearColor(Color::MakeHSV(hue, 0.156862745098039f, 1.0f)); Float32 movement = 1 + Math::Cos(hue / 10.0f); static Float32 rot = 0; rot += deltaTime / 1.0f; context.Viewport(0, 0, window.GetWidth(), window.GetHeight()); context.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT); GL::UseProgram(program); //GL::UniformMatrix4fv(GL::GetUniformLocation(program, "orthoMatrix"), 1, false, Matrix::MakeOrtho2D(0, 1280, 768, 0).GetData()); MatrixF view = MatrixF::MakeLookAt(Vector3F(Math::Cos(rot) * 50, Math::Cos(rot) * 50, Math::Sin(rot) * 50), Vector3F(0, 0, 0), Vector3F(0, -1, 0)); MatrixF projection = MatrixF::MakePerspective(45.0, window.GetWidth() / (Float32)window.GetHeight(), 1, 1000); MatrixF vp = view * projection; MatrixF model; model = MatrixF::MakeScaling(Vector3F(20, 20, 20)) * model; //Matrix wvp = model * Matrix::MakeOrtho2D(0, 1280, 768, 0); MatrixF wvp = model * vp; GL::UniformMatrix4fv(GL::GetUniformLocation(program, "matrix"), 1, false, wvp.GetData()); GL::Uniform1i(GL::GetUniformLocation(program, "texture"), 0); GL::ActiveTexture(GL_TEXTURE0); GL::BindTexture(GL_TEXTURE_2D, texture); GL::BindVertexArray(box); GL::DrawArrays(GL_QUADS, 0, 24); GL::BindVertexArray(0); GL::UseProgram(0); context.SwapBuffers(); Window::Update(); } } catch (Exception& e) { std::cout << e.what() << std::endl; std::cout << std::hex << "Error code: 0x" << e.unique << std::dec << " (decimal " << e.unique << ")" << std::endl; } }