Я пишу рендерер OpenGL с wxWidgets 3.1.3. Я могу видеть фрагменты, которые спрятаны за моей моделью, но обращены ко мне, даже когда они должны быть скрыты. Установка моего фрагментного шейдера для отображения глубины показывает, что глубины устанавливаются правильно, и у меня znear = 0.1 и zfar = 100.
Вот мой код инициализации OpenGL:
this->m_glcontext = new wxGLContext(this);
this->SetCurrent(*this->m_glcontext);
std::remove(ENGINECANVAS_LOG_PATH);
glewExperimental = GL_TRUE;
glewInit();
glLoadIdentity();
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);;
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(MessageCallback, 0);
this->Bind(wxEVT_PAINT, &EngineCanvas::Paint, this);
this->Render();
Вот мой рендер l oop:
glViewport(0, 0, (GLint)this->GetSize().x, (GLint)this->GetSize().y);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
this->m_active_camera->GenPerspMat((float)canvas->GetSize().x, (float)canvas->GetSize().y);
this->m_active_camera->GenViewMat();
for (size_t i = 0; i < this->models.size(); i++)
{
this->models.at(i)->GenPosMat();
this->models.at(i)->shader_program->Select(); //selects shader program
this->m_active_camera->SetUniforms(this->models.at(i)->shader_program);
this->models.at(i)->SetUniforms();
glBindVertexArray(this->models.at(i)->vao);
for (size_t j = 0; j < this->models.at(i)->vertex_buffers_count.size(); j++)
{
glBindBuffer(GL_ARRAY_BUFFER, this->models.at(i)->vertex_buffers.at(j));
glDrawArrays(this->models.at(i)->triangle_mode, 0, this->models.at(i)->vertex_buffers_count.at(j));
}
}
glFlush();
this->SwapBuffers();
Фрагментный шейдер:
#version 400 core
layout(location = 0) out vec4 frag_out;
in vec3 vpos;
void main()
{
frag_out = vec4(vec3(gl_FragCoord.z).xyz, 1.0f);
}
Мои фрагменты удаляются нормально на моей видеокарте NVIDIA, но тестируются на двух разных ноутбуках и на моем интегрированном Графика дает эту ошибку. Моя геометрия отображается правильно. Обратный вызов не возвращает ошибок (обратный вызов работает). Все карты поддерживают как минимум OpenGL 4.0 (что указано в моих шейдерах и моих аргументах GLCanvas).