C ++ OpenGL Ничего не рендерится при попытке суперсэмплинга

Я пытаюсь включить SSAA в мою сцену. Раньше я настраивал всю сцену как FBO, и она отлично работает (она отлично отображается на моем экране). Однако, как только я пытаюсь применить SSAA к нему, экран всегда черный, и я не знаю почему. Я следовал учебнику, основанному на iOS, но его было довольно просто скопировать в окна, которые можно найти Вот
Однако, как я уже сказал, когда пытаешься использовать подобную технику, она не работает. Я понимаю теорию / концепцию SSAA, но не могу заставить ее работать. Любая помощь, которую я действительно ценю, так как я не могу найти много материала по этому вопросу (в основном по MSAA или другим методам А.А.)

Инициализация FBO

void InitSSAAFBO()
{
// Create the on-screen FBO.

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
fboColTex);

glGenRenderbuffers(1, &bigColour);
glBindRenderbuffer(GL_RENDERBUFFER, bigColour);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8,
windowWidth * supersamplingLevel, windowHeight * supersamplingLevel);

glGenRenderbuffers(1, &bigDepth);
glBindRenderbuffer(GL_RENDERBUFFER, bigDepth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24,
windowWidth * supersamplingLevel, windowHeight * supersamplingLevel);

glGenFramebuffers(1, &fboBig);
glBindFramebuffer(GL_FRAMEBUFFER, fboBig);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
bigColour);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER,
bigDepth);

// Create a texture object and associate it with the big FBO.

glGenTextures(1, &offscreenTexture);
glBindTexture(GL_TEXTURE_2D, offscreenTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, windowWidth * supersamplingLevel, windowHeight * supersamplingLevel, 0,
GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, offscreenTexture, 0);

GLenum demoFBOStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);

if (demoFBOStatus != GL_FRAMEBUFFER_COMPLETE) {

fboOkay = false;
cout << "Could not successfully create framebuffer object to render texture!" << endl;

}
else {

fboOkay = true;
cout << "FBO successfully created" << endl;
}

// Unbind FBO for now! (Plug main framebuffer back in as rendering destination)
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}

Rendering

void display(void) {

//Bind Large FBO
glBindFramebuffer(GL_FRAMEBUFFER, fboBig);
glBindRenderbuffer(GL_RENDERBUFFER, bigColour);
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, windowWidth * supersamplingLevel, windowHeight * supersamplingLevel);
glEnable(GL_DEPTH_TEST);
DrawScene();//Bind small/Onscreen FBO
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glBindRenderbuffer(GL_RENDERBUFFER, fboColTex);

glViewport(0, 0, windowWidth, windowHeight);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glDisable(GL_DEPTH_TEST);
glUseProgram(fboShader);
glBindVertexArray(quadVAO);
glBindTexture(GL_TEXTURE_2D, offscreenTexture);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);

glutSwapBuffers();
}

fboShader (вершинный шейдер)

#version 330 core
layout (location = 0) in vec2 position;
layout (location = 1) in vec2 texCoords;

out vec2 TexCoords;

void main()
{
gl_Position = vec4(position.x, position.y, 0.0f, 1.0f);
TexCoords = texCoords;
}

fboShader (Фрагмент шейдера)

#version 330 core
in vec2 TexCoords;
out vec4 color;

uniform sampler2D screenTexture;

void main()
{
color = texture(screenTexture, TexCoords);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector