Draw GL_TEXTURE_RECTANGLE vs. GL_TEXTURE_2D
Draw GL_TEXTURE_RECTANGLE vs. GL_TEXTURE_2D
我正在尝试制作一个函数来绘制2D纹理和矩形纹理。
它把2D的画得很好。然而,当绘制任何矩形纹理时,它会将其绘制为完全白色…
GLuint LoadImage(std::string ImageTitle, GLenum Target)
{
Image Img(("Images/" + ImageTitle).c_str());
std::vector<std::uint8_t> Buffer;
ImageToBuffer(Buffer, Img);
GLuint ID;
glGenTextures(1, &ID);
glBindTexture(Target, ID);
glTexParameteri(Target, GL_TEXTURE_WRAP_S, Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
glTexParameteri(Target, GL_TEXTURE_WRAP_T, Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
glTexParameteri(Target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(Target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(Target, 0, GL_RGB, Img.Width(), Img.Height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, Buffer.data());
return ID;
}
void DrawTexture(GLenum Target, GLuint ID, float X1, float Y1, float X2, float Y2)
{
GLfloat ViewPort[4];
glGetFloatv(GL_VIEWPORT, ViewPort);
glEnable(Target);
glBindTexture(Target, ID);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(X1, Y1);
glTexCoord2f(0, Target == GL_TEXTURE_2D ? 1 : ViewPort[3]);
glVertex2f(X1, Y2);
glTexCoord2f(Target == GL_TEXTURE_2D ? 1 : ViewPort[2], Target == GL_TEXTURE_2D ? 1 : ViewPort[3]);
glVertex2f(X2, Y2);
glTexCoord2f(Target == GL_TEXTURE_2D ? 1 : ViewPort[2], 0);
glVertex2f(X2, Y1);
glEnd();
glDisable(Target);
}
我还尝试使用glTextCoordf(X, Y)
,其中X和Y是1,而不是ViewPort宽度/高度。尝试使用宽度/高度,仍然没有。尝试纹理宽度和高度。我也尝试将矩形加载为2D。没有运气。
Nothing works:S然而,它却可以为Texture2D工作。
我这样使用它:
GLuint ID = LoadImage("RECT_116.png", GL_TEXTURE_RECTANGLE);
//Do other stuff here..
DrawTexture(GL_TEXTURE_RECTANGLE, ID, X1, Y1, X2, Y2);
,它失败了,但当我在2D纹理上这样做时:
GLuint ID = LoadImage("2D_116.png", GL_TEXTURE_2D);
//Do other stuff here..
DrawTexture(GL_TEXTURE_2D, ID, X1, Y1, X2, Y2);
它. .知道我哪里做错了吗?
From http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml
如果目标是GL_PROXY_TEXTURE_2D, GL_PROXY_TEXTURE_1D_ARRAY,GL_PROXY_TEXTURE_CUBE_MAP或GL_PROXY_TEXTURE_RECTANGLE,没有数据从数据中读取,但是所有的纹理图像状态都被重新计算,检查一致性,并对照实现进行检查功能。的纹理请求的纹理大小,它将所有图像状态设置为0,但是不生成错误(参见glGetError)。查询整个mipmap数组,使用大于或等于1的图像数组级别。
如果目标是GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE或GL_TEXTURE_CUBE_MAP目标,数据作为序列从数据中读取有符号字节或无符号字节,短字节或长字节,或单精度字节浮点值,取决于类型。这些值被分组转换为一个、两个、三个或四个值的集合,具体取决于格式表单元素。每个数据字节被视为8个1位元素,用位顺序由GL_UNPACK_LSB_FIRST决定(参见glPixelStore)。
因此,一致性检查可能由于某种原因而失败。
你似乎在做不同的边界条件取决于GL_TEXTURE_2D或GL_TEXTURE_RECTANGLE
glTexParameteri(Target, GL_TEXTURE_WRAP_S,
Target == GL_TEXTURE_2D ? GL_REPEAT : GL_CLAMP_TO_EDGE);
你有没有试过删除那个条件,看看是否会改变情况?
- Visual Studio 19-17 库兼容性根据 GL 标志
- SDL_CreateTextureFromSurface() "Invalid texture"错误?
- 尝试将 sf::Texture* 推送到 std::vector 时出错
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 将"Compass"与相机旋转隔离开GL
- 是否有一个版本的glCopyImageSubData在Openg GL中使用混合?
- 计算着色器Open GL ES的多个输入
- Open GL ES 3.1 的计算着色器的最小工作示例
- 致命错误 C1083:无法打开包含文件:"GL/glew.h":没有此类文件或目录
- 从 texture() 切换到 texelFetch()
- C++ 致命错误:glad/gl.h:没有这样的文件或目录
- 打开 gl 精灵类不起作用
- Qt 找不到 GL 库
- GCC 相当于 MSVC 中的 /GS、/GL、/Gy、/Oi、/MD
- 失败的 glewInit:缺少 GL 版本
- 何时在OS X上使用OpenGL vs GL
- 识别安卓中意外的 GL 上下文丢失
- Android Native:CMake 链接错误:未定义对 GL 函数的引用 - 即使包含并链接了 EGL 和 GLESv3
- Glew - 与 GLFW 配对时 gl- 函数符号上出现链接错误
- 直接 X "Texture cannot be null"异常