簡體   English   中英

openGL 單通道紋理始終采樣 0

[英]openGL single channel texture always samples 0

我正在嘗試使用 freetype 在屏幕上渲染字體。 為此,我實現了單通道紋理,但它總是采樣 0。

cpp

unsigned char *blankData = new unsigned char[8 * 8];
for(int i = 0; i < 8 * 8; i++){
    blankData[i] = 126;
}
    
glActiveTexture(GL_TEXTURE0);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

GLuint m_texture2D;
glGenTextures(1, &m_texture2D);
glBindTexture(GL_TEXTURE_2D, m_texture2D);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, 8, 8, 0, GL_RED, GL_UNSIGNED_BYTE, blankData);

glUniform1i(glGetUniformLocation(m_program, "texture2D"), 0);

checkGLError();

glGetError()返回GL_NO_ERROR

片段着色器

#version 330 core

in vec2 texCoord;
in vec4 color;

uniform sampler2D texture2D;
out vec4 outColor;


void main()
{
    vec4 texColor = texture(texture2D, texCoord);
    outColor = vec4(texColor.r, texColor.r, texColor.r, 1.0f);

}

結果在此處輸入圖像描述

ff00ff:清晰的顏色

黑色:片段着色器 output texcoord bottomLeft(0, 0) to topRight(1, 1)

如果您不生成glGenerateMipmap ,設置GL_TEXTURE_MIN_FILTER很重要。 由於默認過濾器是GL_NEAREST_MIPMAP_LINEAR ,如果您不將最小化 function 更改為GL_NEARESTGL_LINEAR ,則紋理將為“Mipmap Incomplete”。

glBindTexture(GL_TEXTURE_2D, m_texture2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM