У меня проблема с рендерингом треугольника в окне разрешения 800x600. Я никогда не вызывал glViewport в своем коде, но у меня неправильные результаты. Треугольник отображается только в нижней половине окна.
Я попытался установить область просмотра в моем коде, вызвав glViewport (0,0,800,1200), он временно устраняет проблему, но когда я вхожу в полноэкранный режим, все снова запуталось.
#include "ref.h"
int main(void){
WindowInit(&window, "Test", WINW, WINH, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
game = GameInit(60);
VAO vaodef = VAOInit(1);
VAOCreate(&vaodef);
VAOBind(&vaodef);
const GLfloat triangle_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
Shader triangle_shader;
LoadShader(&triangle_shader, "VertexShader.glsl", "FragmentShader.glsl");
GLuint vertexArrayBuffer;
int num_vertices = 3;
glGenBuffers(1, &vertexArrayBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffer);
glBufferData(GL_ARRAY_BUFFER, (sizeof(triangle_data) / (sizeof(GLfloat) / 3)), triangle_data, GL_STATIC_DRAW);
glUseProgram(triangle_shader.program);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexArrayBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glDrawArrays(GL_TRIANGLES, 0, num_vertices);
glDisableVertexAttribArray(0);
glUseProgram(0);
SDL_GL_SwapWindow(window.window);
SDL_Delay(5000);
WindowDestroy(&window);
}
Результаты: результат