问题标签 [glteximage2d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 添加粒子系统后 glTexSubImage2d 不起作用(每个粒子都有纹理)
我们很高兴地使用 glTexSubImage2d 每隔几帧更新一个纹理,该纹理在我们的 GL 初始化中使用 glTexImage2d 初始化。在添加了一个粒子系统后,每个粒子都对其本身进行纹理化,我们的四边形显示 glTexSubImage2d 纹理不显示。
粒子的纹理是 PNG,因此我们使用 SDL 将 PNG 加载到 SDL Surface,然后使用 glTexImage2d 将 PNG 绑定到纹理。
如果我们将四边形的 glTexSubImage2d 调用更改为 glTexImage2d 调用,则纹理显示,但这非常低效,并且至少将帧速率降低了一半,因此宁愿使用 glTexSubImage2d(因为它以前工作过)。
有谁知道为什么我们现在不能使用 glTexSubImage2d?
以下是纹理初始化和绑定的相关代码:
加载粒子纹理
设置四边形的纹理:
initGL() 中唯一的调用是启用 GL_TEXTURE_2D、GL_BLEND 设置 glBlendFunc() 和设置四边形的纹理,如上。
有任何想法吗?
android - Android OpenGL ES 2.0 -- glReadPixels() 和 glTexImage2D() 绘制黑色纹理?
我正在开发一些 Android 代码,用于在 EGL 上下文的丢失和重新创建之间缓存和重绘帧缓冲区对象的颜色缓冲区。开发主要发生在运行 Honeycomb 的 Xoom 平板电脑上。无论如何,我要做的是将在 FBO 上调用 glReadPixels() 的结果存储在直接的 ByteBuffer 中,然后将该缓冲区与 glTexImage2D() 一起使用并将其绘制回(现已清除)帧缓冲区。所有这一切似乎工作正常——ByteBuffer 包含正确的值([-1, 0, 0, -1] 等像素,根据 Java 无法理解无符号字节),似乎没有抛出 GlErrors,并且四边形被绘制到屏幕的右侧(当前为测试目的的帧缓冲区的左上角四分之一)。
但是,无论我尝试什么, glTexImage2D() 总是输出纯黑色纹理。我之前遇到过一些问题——在显示位图时,我最终放弃了尝试将基本的 GLES20.glTexImage2D() 与缓冲区一起使用,而是转而使用 GLUtils.glTexImage2D(),它会为您处理位图。不幸的是,这不是一个选项(我确实尝试将 ByteBuffer 转换为位图,以便我可以使用 GLUtils,但没有取得多大成功),所以我真的没有什么想法了。
谁能想到任何可能导致 glTexImage2D() 无法正确处理完美的 ByteBuffer 的事情?欢迎任何和所有建议。
顺便说一下,gfx.drawTexture() 构建一个四边形并将其绘制到当前绑定的帧缓冲区。该代码已经在我项目的其他部分经过了很好的测试——这不应该是这里的问题。
opengl - glGetTexImage 不适用于 CVOpenGLTextureRef
我正在使用 OpenGL 2.1 为 Mac OS X 编写应用程序
我有一个CVOpenGLTextureRef
保存我用 GL_QUADS 渲染的纹理,并且一切正常。
我现在需要确定纹理的哪些像素是黑色的,因此我编写了这段代码来从纹理中读取原始数据:
glGetError()
报告GL_NO_ERROR
但缓冲区在调用后没有改变glGetTexImage()
...它仍然是空白的。
难道我做错了什么?
请注意,我不能使用glReadPixels()
,因为我在渲染之前修改了纹理,并且我需要获取未修改纹理的原始数据。
编辑:我什至尝试了后续方法,但我仍然有零缓冲区作为输出
c++ - 调用 glTexSubImage2D 时 OpenGL 错误“无效值”
我有一个用于测试的小型应用程序,它正在执行一些后期处理效果。我的目标是使用双 PBO 读取像素,然后将像素渲染到全屏纹理四边形,并在片段着色器中修改/添加我的效果。与此处类似。该应用程序正在使用 OSG,但我正在使用 openGL 调用来进行全屏纹理处理。
我的问题是,当我使用 glTexSubImage2D 将像素复制到每一帧的纹理时,我得到一个无效值 openGL 错误。我已经用 gDEBugger 验证了这是生成错误的调用。第一次发生错误时,指针地址与所有后续帧中的地址不同。此外,通过将 glTexSubImage2d 的宽度和高度参数设为 0,不会产生错误。所以我不确定发生了什么。
以下是相关代码:
opengl - 如何在 OpenGL 中访问 GPU 上的纹理数据?
我不完全理解在 GPU 上访问纹理数据的方式。如果可能的话 - 任何人都可以解释这些吗?
当纹理单元的数量受到限制时,这是否会限制我可以使用生成
glGenTextures()
并上传到 GPU的纹理数量glTexImage2D()
?还是它只限制可以使用绑定的纹理单元的数量glBindTexture()
?我真正想做的是能够将我所有的纹理上传到 GPU - 即使有超过可用纹理单元的数量。当需要纹理时,我只需使用
glBindTexture()
. 这可能吗?
textures - 使用 glTexImage2D 在 OpenGL 中更新纹理
glTexImage2D和glTexSubImage2D是将像素缓冲区传递给纹理的唯一方法吗?
目前,我在设置函数glTexImage2D中使用,将 null 作为缓冲区传递,然后在渲染循环中,我在每次迭代时使用新的缓冲区数据调用glTexSubImage2D 。
但是知道纹理不会改变任何属性(例如尺寸),有没有更有效的方法将实际像素数据传递给渲染纹理?
c++ - C++ OpenGL glTexImage2D 访问冲突
我正在使用 OpenGL(freeglut 和 glew)编写应用程序。
我还想要纹理,所以我对位图文件格式进行了一些研究,并为主标头编写了一个结构,为 DIB 标头(信息标头)编写了另一个结构。
然后我开始编写加载程序。它会自动将纹理绑定到 OpenGL。这是功能:
我知道位图的数据被正确读取,因为我将它的数据输出到控制台并与在绘画中打开的图像进行比较。
这里的问题是这一行:
大多数情况下,我运行应用程序时,这条线会因错误而崩溃:
GunsGL.exe 中 0x008ffee9 处的未处理异常:0xC0000005:访问冲突读取位置 0x00af7002。
这是错误发生位置的反汇编:
这不是我的加载器错误,因为我已经下载了其他加载器。我使用的下载加载器是来自NeHe 的加载器。
编辑:(上面更新的代码)
我重写了加载程序,但我仍然在同一行遇到崩溃。有时我会在 mlock.c 上发生崩溃而不是崩溃(我没记错同样的错误消息):
在线上:
此外,这是应用程序不会崩溃的其中一个时间的屏幕截图(纹理显然不正确):http: //i.stack.imgur.com/4Mtso.jpg
编辑2:
用新的工作代码更新了代码。(标记为答案的回复不包含此工作所需的所有内容,但它很重要)
c++ - glTexImage2D 在 OpenGL 3 及更高版本的 GLUT/FreeType 示例中失败
我正在使用此处找到的示例:http ://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01
问题是,当我指定版本高于 3 的 OpenGL 上下文时,即:
调用 glTexImage2D 会导致 GL_INVALID_ENUM(由 GLIntercept 报告)错误,并且示例的输出为空白。据我从 OpenGL 3.3 参考资料中可以看出,只有当 type 不是有效的类型常量或 target 是无效的目标时才会发生这种情况。
这是违规行:
另外,我尝试修改示例以调整位图大小,使其尺寸最接近 2 的幂,如 NeHe 教程(http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/),但我仍然得到同样的错误。
我也尝试过使用 GLFW 实现示例并遇到同样的问题。
我在示例中使用了不同的着色器加载代码,但着色器编译/链接都很好,如果我没有指定现代 OpenGL 版本,该示例仍然有效。
如果它有助于我的环境是:Windows 7 64 位,Visual Studio 2010
AMD HD6950 图形和 Catalyst 12.3 驱动程序。
软件库是:
FreeGLUT 2.8.0
GLEW 1.7.0
FreeType 2.4.9
glm-0.9.3.0
作为参考,这里是 gliLog.txt - 我省略了日志末尾的大部分内容,因为它一遍又一遍地重复出现相同的错误。
这是示例代码
ios - 在iOS4.0上播放yuv420失败,但在iOS5.0上成功
在 iOS5.0 上使用以下代码从摄像头拍摄的视频可以正常播放,
在 iOS4.0 上,以下代码运行良好,
但是当播放从本地mp4文件读取的视频时,第二种方法失败了,第一种方法很好,很奇怪,我是自欺欺人。那么如何解决呢?为什么会这样?
ios - 带有 GL_DEPTH_COMPONENT 的 glTexImage2D 在 iOS4 上工作,在 iOS 5 中以 GL_INVALID_ENUM 失败
以下代码在 iOS 4 上正常工作,并在 iOS5 上 glTexImage2D 之后的 CHECK_GL_ERROR 宏 0x500 中打印。我搜索了这方面的信息,但没有找到任何有用的信息。
我试图改变 glTexImage2D 的参数,但没有成功。为什么会这样?iOS 4 和 5 有什么区别?如何解决这个问题?