void TextureDrawHelperDraw( TEXTURE_DRAW_HELPER* helper, float* rect, const float* position, GLuint texture_name ) { float model_view[16] = {1, 0, 0, position[0], 0, 1, 0, position[1], 0, 0, 1, position[2], 0, 0, 0, 1}; float projection[16] = IDENTITY_MATRIX; if(texture_name == 0) { return; } glDisable(GL_DEPTH_TEST); TextureDrawHelperUpdateVertexBuffer(helper, rect); Ortho(projection, 0, (float)helper->width, 0, (float)helper->height, -1.0f, 1.0f); ShaderProgramBind(&helper->program.base_data); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture_name); MulMatrix4x4(projection, model_view, projection); //MulMatrix4x4(model_view, projection, projection); TextureDrawHelperProgramSetUniformValues(&helper->program, projection, texture_name); TextureDrawHelperBindVertexBundle(helper, TRUE); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); TextureDrawHelperUnbindVertexBundle(helper, TRUE); ShaderProgramUnbind(&helper->program.base_data); glBindTexture(GL_TEXTURE_2D, 0); glEnable(GL_DEPTH_TEST); }
// инициализаця OpenGL bool GLWindowInit(const GLWindow *window) { ASSERT(window); // устанавливаем вьюпорт на все окно glViewport(0, 0, window->width, window->height); // параметры OpenGL glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); // создадим и загрузим шейдерную программу if ((shaderProgram = ShaderProgramCreateFromMemory(vertexShader, fragmentShader)) == 0) return false; // собираем созданную и загруженную шейдерную программу if (!ShaderProgramLink(shaderProgram)) return false; // сделаем шейдерную программу активной ShaderProgramBind(shaderProgram); // проверка шейдерной программы на корректность if (!ShaderProgramValidate(shaderProgram)) return false; // создадим примитив для сферы MeshCreateSphere(mesh, vec3(0.0f, 0.0f, 0.0f), 1.0f); // создадим и настроим камеру CameraCreate(mainCamera, -1.0f, -1.0f, -1.0f); CameraOrthographic(mainCamera, -0.5f, 0.5f, -0.5f, 0.5f, -10.0f, 10.0f); CameraRotate(mainCamera, (float)(-math_degrees * asin((double)1/sqrt(3.0))), 135.0f, 0.0f); // проверим не было ли ошибок OPENGL_CHECK_FOR_ERRORS(); return true; }