128-битная текстура в openGL не отображается (черный экран)

Я создаю текстуру так:

GLuint PingPongShader::GenerateTexture()
{

float* pixels = new float[width*height * 4];
for(int i = 0; i < width * height; i+=4)
{
    pixels[i] = 1.0;
    pixels[i+1] = 1.0;
    pixels[i+2] = 1.0;
    pixels[i+3] = 1.0;
}
GLuint t;
glGenTextures(1, &t);
glBindTexture(GL_TEXTURE_2D, t);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, pixels);
delete[] pixels;
LogGLError();
return t;
}

Моя функция отображения выглядит следующим образом:

void display()
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    shader.BindCurrentTexture();
    shader.EnableShader();
    glBegin(GL_QUADS);
    {
        glTexCoord2f(0.0f, 0.0f);
        glVertex2f(-1.0f, -1.0f);

        glTexCoord2f(1.0f, 0.0f);
        glVertex2f(1.0f, -1.0f);

        glTexCoord2f(1.0f, 1.0f);
        glVertex2f(1.0f, 1.0f);

        glTexCoord2f(0.0f, 1.0f);
        glVertex2f(-1.0f, 1.0f);

    }
    shader.DisableShader();
    glDisable(GL_TEXTURE_2D);
    glutSwapBuffers();
}

Шейдер выглядит так: Vertex:

varying vec2 texture_coordinate;

void main()
{
    // Transforming The Vertex
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

    // Passing The Texture Coordinate Of Texture Unit 0 To The Fragment Shader
    texture_coordinate = vec2(gl_MultiTexCoord0);
}

Фрагмент:

varying vec2 texture_coordinate; 
uniform sampler2D my_color_texture;

void main()
{
    // Sampling The Texture And Passing It To The Frame Buffer
    gl_FragColor = texture2D(my_color_texture, texture_coordinate);
}

Почему-то у меня только черный экран, хотя все пиксели 1.0 (белые). Я не вижу, где проблема:/

1 ответ

Вы пишете код с использованием устаревших функций. В OpenGL 4.4 вы не можете использовать glBegin() и друзья. Пожалуйста, используйте VBO для вершинных и текстурных координатных данных. Вы можете посмотреть это в современном учебнике по OpenGL. Вы также можете запросить более старый контекст OpenGL, используя glutInitContextVersion(), Убедитесь, что вы используете OpenGL 2.1 или включите профиль совместимости для версий> 3.0.

Другие вопросы по тегам