相关疑难解决方法(0)

openGL SubTexturing

我有图像数据,我想得到一个用作opengl纹理的子图像.

glGenTextures(1, &m_name);
glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldName);
glBindTexture(GL_TEXTURE_2D, m_name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_data);
Run Code Online (Sandbox Code Playgroud)

如何获得作为纹理加载的图像的子图像.我认为它与使用glTexSubImage2D有关,但我不知道如何使用它来创建我可以加载的新纹理.呼叫:

glTexSubImage2D(GL_TEXTURE_2D, 0, xOffset, yOffset, xWidth, yHeight, GL_RGBA, GL_UNSIGNED_BYTE, m_data);
Run Code Online (Sandbox Code Playgroud)

我什么都看不到,调用glCopyTexSubImage2D只是占用了我的帧缓冲区.谢谢

c++ opengl

8
推荐指数
1
解决办法
9946
查看次数

CVOpenGLESTexture方法类型的官方文档在哪里?

我试过谷歌和stackoverflow但我似乎无法找到以CVOpenGLESTexture开头的函数的官方文档.我可以看到它们来自核心视频,我知道它们是在iOS 5上添加的,但搜索文档并没有给我任何东西.

我正在寻找有关参数的信息,他们做什么,如何使用它们等,就像在其他苹果框架中一样.

到目前为止我所能做的就是命令点击它来查看信息,但这感觉非常奇怪.或者有没有办法添加它,以便它可以显示在xcode右侧的快速帮助?

如果这是一个愚蠢的问题,谢谢,对不起.

PD:核心视频参考指南似乎也没有解释这些.

xcode opengl-es ios ios5

8
推荐指数
1
解决办法
8296
查看次数

ScreenCaptureKit/CVPixelBuffer 格式会产生意想不到的结果

我有一个使用 ScreenCaptureKit 的项目。由于超出问题范围的各种原因,我配置 ScreenCaptureKit 使用的格式是kCVPixelFormatType_32BGRA——我需要原始 BGRA 数据,稍后会对其进行操作。

当我从数据构造一个CGImage或时,显示和一些窗口看起来很好(完整的代码包含在问题的底部 - 这只是转换的摘录)。NSImage

guard let cvPixelBuffer = sampleBuffer.imageBuffer else { return }
CVPixelBufferLockBaseAddress(cvPixelBuffer, .readOnly)
defer { CVPixelBufferUnlockBaseAddress(cvPixelBuffer, .readOnly) }
let vImageBuffer: vImage_Buffer = vImage_Buffer(data: CVPixelBufferGetBaseAddress(cvPixelBuffer),
                                                        height: vImagePixelCount(CVPixelBufferGetHeight(cvPixelBuffer)),
                                                        width: vImagePixelCount(CVPixelBufferGetWidth(cvPixelBuffer)),
                                                        rowBytes: CVPixelBufferGetWidth(cvPixelBuffer) * 4)
        
let cgImageFormat: vImage_CGImageFormat = vImage_CGImageFormat(
                    bitsPerComponent: 8,
                    bitsPerPixel: 32,
                    colorSpace: CGColorSpaceCreateDeviceRGB(),
                    bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.last.rawValue),
                    renderingIntent: .defaultIntent
                )!
if let cgImage: CGImage = try? vImageBuffer.createCGImage(format: cgImageFormat) {
  let nsImage = NSImage(cgImage: cgImage, …
Run Code Online (Sandbox Code Playgroud)

cgimage swift cvpixelbuffer screencapturekit

7
推荐指数
1
解决办法
399
查看次数

CVImageBuffer 带有额外的列填充。我如何裁剪它?

我有一个 CVImageBuffer,它的记录高度为 640 像素,宽度为 852 像素。每行的字节数为 3456。您会注意到 3456/852px != 4(类似于 4.05)。经过一些检查,864 将是使 bytesPerRow/width = 4.0 的宽度。因此,每行似乎都有一个额外的 12px(填充在右侧)。我假设这是因为这些缓冲区针对该图像没有的某些倍数进行了优化。

当我在 OpenGL 中渲染出这个缓冲区时,它看起来很糟糕(见下文)。我注意到该模式每 71 像素重复一次,这是有道理的,因为如果有额外的 12 像素,则 (852/12 像素 = 71)。因此,额外的 12 个像素似乎是导致问题的原因。

如何非常快速地摆脱这些额外的像素,然后使用这些数据读入 OpenGL ES?或者更确切地说,我如何通过跳过每一行上的这些额外像素来读入 OpenGL ES?

在此处输入图片说明

opengl-es core-graphics core-video ios

3
推荐指数
1
解决办法
1603
查看次数