问题标签 [glreadpixels]
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.
c++ - 如何将从 glReadPixels 捕获的屏幕截图绘制到 wxWidgets 对话框/面板
我有一个 OpenGL 窗口和一个 wxWidget 对话框。我想将 OpenGL 镜像到对话框。所以我打算做的是:
- 捕获opengl的屏幕截图
- 将它显示在 wxwidgets 对话框中。
任何想法?
更新:这就是我目前使用 glReadPixels 的方式(我也暂时使用 FreeImage 保存到 BMP 文件,但如果有办法将文件保存直接传送到 wxImage,我希望删除文件保存)
ios - iOS 上的 OPENGL ES,glreadpixel 不适用于 BGRA 格式
在 iOS 设备上(我试过 ipad1 和 ipad2)glreadpixel 适用于 RGBA 像素格式,但对于 BGRA 像素格式则不起作用。在下面的代码中,我使用 GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 来获取原生像素格式,即 GL_BGRA_EXT,但 glgeterror 返回 GL_INVALID_ENUM。这与 opengl 文档http://www.khronos.org/opengles/sdk/1.1/docs/man/glReadPixels.xml中的声明相矛盾,如果格式不是 GL_RGBA 或 GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 的值,则会生成 GL_INVALID_ENUM。
有人对此有任何看法吗?
iphone - 如何像 iPhone 中的 Talking Tomcat 应用程序一样录制屏幕视频?
嘿,我正在尝试记录我的游戏的游戏玩法,以便我可以将其视频从设备本身上传到 youtube……我正在尝试做与 iPhone 版 Talking tomcat 应用程序相同的事情……录制视频然后播放等等……
我使用 glReadPixels() 读取帧缓冲区数据,然后借助 AVFoundation 框架中的 AVAssetWriter 将其写入视频。但是,只有在使用 glReadPixels 时,读取每个绘图上的数据才会将 FPS 从大约 30-35 降低到 2-3。
我认为Talking tomcat也是在Opengl ES的帮助下制作的,它还具有视频录制功能,但是在阅读每一帧时它不会减慢任何想法......?
c++ - opengl 模板缓冲区未初始化为零?
我在 MS WindowsXP 下工作,我的显卡是 itel GMA4500,我的代码:
但是当我检查数据缓冲区时,我可以看到字节不是全为零,那么问题是什么?
是的,我确定我有一个模板缓冲区,在调用 glReadPixels 后,我检查了 glGetError,没有错误。我也试过 memset 用零填充数据缓冲区,但结果没有改变。
c++ - 从 glReadPixels 创建 HBITMAP
我需要从 glReadPixels() 调用返回的数据创建一个 HBITMAP:
我尝试使用:
这可以粘贴到 mspaint 中(所以数据很好)但是我到底如何将它放入 HBITMAP 中?!?!
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() 构建一个四边形并将其绘制到当前绑定的帧缓冲区。该代码已经在我项目的其他部分经过了很好的测试——这不应该是这里的问题。
c++ - 如何在不同的线程上调用 glReadPixels?
当我在另一个线程上调用 glReadPixels 时,它不会返回任何数据。我在某处读到建议我需要在调用线程中创建一个新上下文并复制内存。我该怎么做?
这是我使用的 glReadPixels 代码:
或者,我从这个线程中读到他们建议使用另一段代码(见最后),但我不明白什么是 origX、origY、srcOrigX、srcOrigY?
ios - OpenGL ES - 降低纹理质量和纹理大小
是否可以“降低”OpenGL ES 中的纹理质量?降级是指使图像更加像素化/块状/模糊等。
我的目标是减少纹理的大小以帮助glReadPixels
更快地运行(从 VRAM 到 RAM 的传输更少的字节)。
也许我可以在调用之前做一些事情glCopyTexImage2D
,以使复制的纹理质量较低(希望尺寸更小)?
c# - OpenGL:虽然 glGetError 返回 0,但 glReadPixels “失败”
问题总结:
我使用 OpenGL glReadPixels 来获取屏幕截图,但缓冲区没有改变。如果我使用 glGetError 从最后一个函数中获取错误,它返回 0,好像一切都很好。
我已经在网上进行了彻底的研究,没有发现任何人面临这样的问题。
详细说明:
我正在使用 CsGL.dll,它基本上只是将 OpenGL 包装到 C#,并且我已经进行了使用 GL 所需的初始化:来自 hWnd 的 DC,ChoosePixelFormat for DC 使用 PixelFormatDescriptor 并将其设置为它的格式,为 DC 创建 RC并调用 wglMakeCurrent(RC, DC)。
请注意,我正在为 Windows API 函数使用简单的包装器。这是我使用的初始化代码:
我已将 User.GetForegroundWindow() 作为 hWnd 发送。
在此初始化之后,我尝试将屏幕截图放入图像中(并且我还尝试将其读入一个简单的字节数组)
glReadPixels 用法的简短伪代码:
用一个简单而小的 byte[] 尝试它是这样完成的:
并且 byte[] 都是零。我也尝试过使用更大尺寸的数组(保持 0、0、10、10),但仍然无济于事。
在这两种情况下,结果是相同的。缓冲区根本没有改变,而 glGetError 调用在每次 GL 函数调用后返回 0。
Back.bmp 和 Front.bmp 都是全黑的。
请告诉我我做错了什么?谢谢
java - glReadPixel 返回零和错误 1282 (Android)
这是我的选择代码
对不起,混乱。无论如何,无论我点击哪里,这段代码似乎总是返回 (0,0,0)。我有一个红色正方形,一个绿色,正方形和蓝色背景用于测试目的,每次绘制一个正方形并且按下屏幕时都会调用此方法
即使屏幕上没有黑色空间,我总是会得到黑色值,所以我很确定这不仅仅是一个精度问题。我在那里有一个日志标签,它返回视口值,它们很好,我还检查了我的 xy 坐标,它们看起来是合法的,我唯一需要做的就是 1282 错误代码。
有谁知道这可能是什么?
编辑:
是的,我们知道问题来自读取像素函数,因为我在函数之前和之后放置了 glGetError() 并且它又回来了
摆脱缩放并没有帮助,但这是一个很长的目标
我已将 Buffer 更改为 FloatBuffer,现在我返回 (0.0, 0.0, 0.0) 而不是 (0, 0, 0) 我知道的胜利并不多。我还注意到错误现在是 1280 (GL_INVALID_ENUM)。我不知道这是否是一个进步。如果不是错误 1282,有谁知道如何修复此错误。