OpenGL帧缓冲区:可以清除它,但不能绘制它

2023-11-26

在 Mac 上,我有一个 OpenGL 设置,除了帧缓冲区外,它工作得很好 - 纹理工作等。所以我知道纹理已启用,我有一个有效的上下文,等等。所有工作都完美无缺,直到我尝试创建一个帧缓冲区。

我使用 glGenFramebuffers、glBindFramebuffer 和 glFramebufferTexture2D 创建了一个帧缓冲区,并且 glCheckFramebufferStatus 返回 GL_FRAMEBUFFER_COMPLETE。如果我随后调用 glClear,然后调用 glGetTexImage,则返回的数据显示 glClear 按其应有的方式作用于绑定到帧缓冲区的纹理。我可以将 glClearColor 设置为我想要的任何内容,并且 glClear 正确设置纹理数据。

但好消息就到此为止了。无论我使用 VBO 还是 glBegin/glEnd,我都无法将任何内容绘制到帧缓冲区中。绑定到帧缓冲区的纹理中的纹理数据不会受到绘制调用的影响(尽管 glClear 结果仍然出现)。即使我在调用 glGetTexImage 之前调用 glFlush 和 glFinish 也是如此。另外,glGetError 对于我的任何调用都没有返回错误。

我在下面发布了一些示例代码,这些代码是我在程序中的相关点添加的,只是为了尝试解决这个问题,以防给任何人一个想法。 (这不包括 glClear 调用,但我从同一点的单独测试中知道它工作正常)。

    glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbTexID, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
if(status != GL_FRAMEBUFFER_COMPLETE)
    Debugger(); 

glEnable(GL_TEXTURE_2D); 
glCullFace(GL_NONE); 
glGenTextures(1,(GLuint*)&tex); 
glBindTexture(GL_TEXTURE_2D,tex); 
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,1024,1024,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL); 
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1024, 1024, 0, -5000, 5000); 
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); 
glViewport(0, 0, 1024, 1024); 
glColor4f(1,1,1,1); 
glBegin(GL_TRIANGLES);
    glTexCoord2f(0, 0);
    glVertex2f(0, 0);
    glTexCoord2f(1, 0);
    glVertex2f(1024, 0);
    glTexCoord2f(0, 1);
    glVertex2f(0, 1024);
glEnd();
glFlush();
glFinish(); 
unsigned char *dd = new unsigned char[1024*1024*4]; 
glBindTexture(GL_TEXTURE_2D, fbTexID); //I've tried calling glBindFramebuffer(GL_FRAMEBUFFER,0) before this bind - makes no difference
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, dd);
delete dd; 

您的纹理不起作用,因为它已被绑定! 你不能有一个bound纹理在 FBO 上作为渲染目标工作! 这是没有太多记录的事情,但是当你思考它时就有意义了 驱动程序开发人员也需要一些保护措施,以防万一您做了一些奇怪的事情,例如同时读取和写入同一纹理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL帧缓冲区:可以清除它,但不能绘制它 的相关文章

  • 着色器/矩阵问题 - 看不到对象

    我试图在屏幕上放置一个立方体并点亮它 我想要在立方体上添加 phong 阴影 当我运行代码时 我可以看到背景图像 但看不到立方体 我相当确定立方体本身是正确的 因为我已经设法用纯色着色器显示它 我已经设法编译着色器程序 但我根本看不到立方体
  • libgdx 中帧缓冲区的结果不明确

    我得到以下奇怪的结果帧缓冲区 http libgdx badlogicgames com nightlies docs api com badlogic gdx graphics glutils FrameBuffer htmllibgdx
  • OpenGL NURBS 曲面

    我正在学习 OpenGL 我想要一个中间有轻微驼峰的表面 我目前正在使用这段代码 但我不确定如何调整 ctrl 点以使其达到我想要的方式 它目前就像 我想要这样的 我不完全确定我应该使用哪些控制点 并且我对其工作原理感到困惑 include
  • 交错顶点提交如何提高性能?

    我已经阅读并看到了其他问题 这些问题通常都指向将顶点位置和颜色等交错到一个数组中的建议 因为这可以最大限度地减少从 cpu 发送到 gpu 的数据 我不清楚的是 即使使用交错数组 您仍然必须对位置和颜色指针进行单独的 GL 调用 OpenG
  • OpenGL 说“from_param 收到了一个不连续的数组”

    安装 Yosemite 后 我必须升级 numpy PyOpenGL 等 现在 以前运行的程序给了我以下堆栈跟踪 file latebind pyx line 44 in OpenGL accelerate latebind Curry c
  • glutPostRedisplay 不在循环内工作

    我试图让一个人在 y 轴上跳跃 所以我使用 2 秒的循环 第一秒它应该向下移动并弯曲膝盖 第二秒它应该向上移动 然后在起始位置完成 现在我刚刚开始让这个人在第一秒内跪下并弯曲膝盖 我还没有编写动画的其余部分 问题是 glutPostRedi
  • OpenGL 和加载/读取 AoSoA(混合 SoA)格式的数据

    假设我有以下 AoSoA 格式的简化结构来表示顶点或点 struct VertexData float px 4 position x float py 4 position y 也就是说 每个实例VertexData存储4个顶点 我见过的
  • OpenGL z轴指向哪里?

    我正在尝试了解 OpenGL 坐标系 我到处都看到它被描述为右撇子 但这与我的经验不符 我尝试绘制一些形状和 3 d 对象 我发现 z 轴显然指向 屏幕 而 x 指向右侧 y 指向上方 这是左手坐标系的描述 我缺少什么 编辑 例如 http
  • glEnableVertexAttribArray 中“index”参数的含义以及(可能)OS X OpenGL 实现中的错误

    1 我是否正确理解 要使用顶点数组或VBO进行绘制 我需要所有属性在着色器程序链接之前调用glBindAttribLocation 或者在着色器程序成功链接后调用glGetAttribLocation 然后使用glVertexAttribP
  • 不理解 gluOrtho2D 函数

    我不能做什么gluOrtho2D 函数是做什么的 是否将原点固定在 OpenGL 窗口上的某个特定点或其他位置 这是因为gluOrtho2D 1 1 1 1 将原点固定在窗口的中间 如果它在某个时刻没有修复原点 那么有什么方法可以修复原点
  • lwjgl 3 , glUniformMatrix4 导致 jre 崩溃

    我正在使用 lwjgl 3 并学习现代 opengl 3 我想将统一矩阵发送到顶点着色器 以便我可以应用转换 我尝试过 但程序因此错误而崩溃 A fatal error has been detected by the Java Runti
  • 使用 GLSL 着色器在同一片段着色器中定义的多个子例程类型无法正常工作

    我正在开发一个使用 GLSL 着色器的程序 我编写了 2 种不同的方法来用 2 种不同的方法计算 ADS 环境光 漫反射 镜面反射 着色 为了正确完成这项工作 我使用子例程来使用一种或另一种方法来计算 ADS 着色 这是片段着色器代码的一部
  • SDL 鼠标位置调整大小后裁剪

    我在 SDL 中的鼠标位置上遇到了一些奇怪的行为 如果我将窗口大小调整得更大 则任一鼠标事件的 x y 位置似乎都限制为原始窗口的宽度和高度 如果我缺少一些函数调用来告诉 SDL 鼠标区域的大小已增加 应用程序的相关部分 void Resi
  • 使用 C# 截取任何外部应用程序的屏幕截图

    我们有一个 C WPF 应用程序 我们想要在其中截取我们启动的任意应用程序的屏幕截图 即 我们可以引用我们启动的进程 应用程序可能已最小化或位于其他窗口后面 但我们仍然只需要单个应用程序的图像 而不是重叠像素 我知道使用 BitBlt 或的
  • PyQt5 的 OpenGL 模块和版本控制问题(调用不正确的 _QOpenGLFunctions_(ver))

    我一直在努力得到PyQt5 helloGL 示例代码 https github com baoboa pyqt5 blob master examples opengl hellogl py编译 当我尝试构建解决方案时 我得到 Traceb
  • OpenGL - 两个纹理的幂

    OpenGL 使用二次幂纹理 这是因为由于 MipMapping 某些 GPU 只接受 2 的幂纹理 当绘制比实际更大的纹理时 使用这些二次方纹理会导致问题 我想到了一种方法来解决这个问题 即仅在我们使纹理小于实际大小时使用 PO2 比率
  • GLSL NVidia 方形神器

    当 GLSL 着色器在以下 GPU 上生成不正确的图像时 我遇到了问题 GT 430 GT 770 GTX 570显卡760 但在这些上正常工作 英特尔高清显卡 2500英特尔高清4000英特尔4400显卡740MRadeon HD 631
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • Glew+GLFW Win32 无依赖项 Visual Studio

    是否可以在不将文件复制到 C 的情况下构建并链接 Glew 和 GLFW 我找不到任何说明如何在不将 DLL 复制到 C 上的 Visual Studio 目录的情况下使用这些库的文档 我只想包含项目目录中所需的所有 dll 和 lib 文
  • 如何仅剪切剪切平面的交集(而不是并集)?

    在 OpenGL JOGL 中 当使用多个剪切平面时 似乎会应用所有剪切平面的并集 我想要的是路口要应用的所有剪裁平面 这可能吗 请参阅下面的简化二维示例 Edit An example of clipping by vertex shad

随机推荐

  • 通过文本转语音朗读时暂停电话铃声,然后恢复

    我正在制作一个来电者语音应用程序 它使用 TTS 说出来电者姓名 我想在 TTS 说话时暂停铃声 然后恢复铃声 根据我的研究 我们可以使用AudioFocus 希望如此 无论如何我正在使用以下代码 Update 我现在正在使用这段代码 pu
  • Java:如何将java.util.logging的语言更改为英语?

    我有 java util logging 将输出打印到文件 效果很好 然而 这些消息包含对应于日志级别以及记录消息的时间 如何让它打印英文而不是中文 这就是当前消息的样子 11月 08 2016 8 28 03 下午 mySamples t
  • 取消 Afnetworking 2.0 中的 Post 请求

    您好 我正在使用 AFnetworking 2 0 发出发布请求 我的请求看起来像这样 AFHTTPRequestOperationManager manager AFHTTPRequestOperationManager manager
  • 无法打开另一个 Excel 文件(当通过 .net 打开一个 Excel 时)

    我设计了一个 net 应用程序 它将在登录时打开 Excel 文件并用它来打印报告 当用户注销时它将被关闭 我将 Excel 文件的可见设置为 false 以便用户不知道后台进程 但是 如果任何人在此期间打开任何其他 Excel 文件 我的
  • 有没有办法使用javascript检测网络连接类型? [复制]

    这个问题在这里已经有答案了 我想知道是否有任何方法可以检查用户是否使用 javascript 从 2G 3G 4G 或 WiFi 连接 据我所知 只有 Mozilla 提供了网络信息 API 它有助于检测一般连接类型 如 wifi 蜂窝 等
  • 如何在 Caliburn.Micro 中绑定按键手势?

    如何让 Caliburn Micro 将按键手势映射到 ViewModel 上的操作方法 例如 我想实现一个选项卡式界面 并且希望我的 ShellViewModel 有一个 NewTab 方法 用户应该能够通过按键盘上的 Ctrl T 来调
  • 如何通过我的网站分享 Facebook 活动?

    我想在我的网站上分享活动 有按钮 喜欢它 但没有像 加入活动 这样的按钮 有任何想法吗 None
  • 如何使用C++流优雅地读取整数?

    我有一个充满以下格式行的文件 1 2 3 我只想使用 C 流加载数字 最优雅的方法是什么 我只考虑了 cin get 并检查每个字符是否是数字 我认为这将是最快但又优雅的方式 int a b c scanf d d d a b c
  • “成功但有错误”的 HTTP 状态代码?

    我查了一下 但没有看到请求成功时的 HTTP 状态代码 但在 不返回点 之后出现错误 例如 假设您处理一个请求 将其提交给数据库 但是在返回结果时您耗尽了内存 或者遇到了 NPE 或者发生了什么 它would曾经是200响应 但现在 在内部
  • iOS 7 的持久 UDID 等效项? [复制]

    这个问题在这里已经有答案了 首先我想说我完全清楚uniqueIdentifier已被弃用 并且有identifierForVendor advertisingIdentifier 我的问题是 是否有办法完全持久设备标识符在重启 应用程序卸载
  • 我有一个可执行文件的核心转储,该可执行文件不是使用调试符号构建的。我可以恢复 argv 内容吗?

    我有一个可执行文件的核心转储 该可执行文件不是使用调试符号构建的 我可以恢复 argv 内容以查看命令行是什么吗 如果我运行 gdb 我可以看到回溯 并且可以导航到 main 框架 一旦到达那里 有没有办法在不知道其确切地址的情况下恢复 a
  • Boost单元测试主要功能?

    我该如何定义自己main 使用 boost 进行测试时的功能 Boost 使用它自己的 main 函数 但我使用自定义内存管理器 并且需要在分配任何内存之前对其进行初始化 否则我会收到错误 我不相信你真的需要你自己的主要 我认为你的情况要好
  • 如何从 Homebrew 重新安装 python@2?

    我在使用 openssl 和 python 2 时遇到了问题 这里已经解释了 未解决 记录的重新安装 Python 和 openssl 的解决方法不起作用 因此我决定卸载并重新安装 Python 问题是 当您尝试使用brew 安装Pytho
  • java Callable FutureTask Excecuter:如何监听已完成的任务

    我对执行者服务很陌生 喜欢自己做所有事情 但我认为是时候信任这些服务了 我想手过去Executer a Runnable 执行器将其包装在一个FutureTask然后把它还给我 现在我称之为民意调查done 方法 但我希望届时得到通知don
  • 如何获取目录中的所有文件并跳过未经授权的文件?

    我需要获取 C 盘中允许的所有文件的列表writing and reading 所以我尝试这样 string files Directory GetFiles C SearchOption AllDirectories foreach st
  • 如何加快 R 中的文本搜索速度?

    我有一个很大的文本向量 我想搜索特定的字符或短语 正则表达式需要很长时间 怎样才能快速搜索到呢 样本数据 R lt 10 7 garbage lt replicate R paste0 sample c letters 1 5 10 rep
  • JSON 响应字符串中的取消转义字符

    我发出了一个 JSON 请求 它给了我一个使用的字符串Unicode 字符代码看起来像 s u003Cp u003E 我想将其转换为 s p 在 Python 中执行此操作的最佳方法是什么 请注意 这是同一个问题this one 仅适用于除
  • html 表 colspan 未按预期工作

    HTML 概念有时是如此糟糕 这是我在 html 表中使用 colspan 的代码 看起来并不像我预期的那样 table border 1 tr td a td tr tr td b td td c td tr table 我想要的是 ce
  • VBA 宏运行时错误 6:循环内编码溢出

    遇到此错误的问题 我正在创建一个 GA 循环是将我的适应度值分配给一个数组 一些变量 Dim Chromolength as integer Chromolength varchromolength aVariables Dim i as
  • OpenGL帧缓冲区:可以清除它,但不能绘制它

    在 Mac 上 我有一个 OpenGL 设置 除了帧缓冲区外 它工作得很好 纹理工作等 所以我知道纹理已启用 我有一个有效的上下文 等等 所有工作都完美无缺 直到我尝试创建一个帧缓冲区 我使用 glGenFramebuffers glBin