opengl纹理 - 无法访问图像

时间:2017-12-23 19:52:47

标签: opengl

我想要一个简单的三角形纹理,但屏幕上没有图像。 通过使用另一个使用颜色缓冲区颜色的着色器,它可以正常工作。 我在将它传递给gl之前检查了bmp图像的内容。 这是加载和传递纹理到gl

的部分

uv 0,0 / 1,0 / 0.5,1.0

  bmp_s   = Load_BMP( tex_file );

  glActiveTexture( GL_TEXTURE0 );
  glGenTextures( 1, &tex_buf->texture            );     // Create the buffer id
  glBindTexture( GL_TEXTURE_2D, tex_buf->texture );     // bind it
  glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, bmp_s->width, bmp_s->height, 0, GL_BGR, GL_UNSIGNED_BYTE, bmp_s->img );

  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT                   );
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT                   );
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR               );
  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
  glGenerateMipmap( GL_TEXTURE_2D ); 

这是绘图循环

 do
  {

    Process_Input_Events();         // get mouse & kb -- calc mvp / view matrix
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    _uid_mvp         = glGetUniformLocation( __sh_list[ 3 ].prg_id, "mvp_mx" ); 
    _uid_tex_sampler = glGetUniformLocation( __sh_list[ 3 ].prg_id, "tex_sampler" );         

    glUseProgram( sh_s->prg_id );            // use the shader

    glUniformMatrix4fv( _uid_mvp, 1, GL_FALSE, &_sys.mvp_mx[ 0 ][ 0 ] );       // send mvp

    glBindVertexArray( vao->id );            // bind vao


    glActiveTexture( GL_TEXTURE0 );
    glBindTexture( GL_TEXTURE_2D, vao->tex_buf->texture );
    glUniform1i( _uid_tex_sampler, 0 );

    glDrawArrays( vao->prim, 0, vao->vx_b->numb );

    glBindVertexArray( 0 );                  // unbind vao
    glUseProgram( 0 );                       // unbind shader
  } while( condition );

以下是着色器

#version 450 core

layout( location = 0 ) in vec3 vx;             // the vertex_buffer in modelspace
layout( location = 3 ) in vec2 uv_in;          // uv coordiantes for each vertex

out vec2 uv;                   

uniform mat4 mvp_mx;  


void main()
{
  gl_Position =  mvp_mx * vec4( vx, 1.0f );
  uv = uv_in;
}


#version 450 core

in  vec2 uv;                     // interpolated values from vertex shader
out vec3 out_color;

uniform sampler2D tex_sampler;       // Index of opengl texture

void main()
{
  out_color = texture( tex_sampler, uv ).rgb;
}

任何帮助将不胜感激

0 个答案:

没有答案