Oli*_*ver 0 c++ opengl graphics 64-bit assembly
为了在 OpenGL 中渲染视频,我遵循了Nehe 的本教程。我正在尝试在 x64 上构建它,但是在编译代码时它给了我一个错误,它指向 flipIt(void* buffer) 函数。是写的不好还是需要导入库?
void Video::flipIt(void* buffer)
{
void* b = buffer;
__asm
{
mov ecx, 256 * 256
mov ebx, b
label :
mov al, [ebx + 0]
mov ah, [ebx + 2]
mov[ebx + 2], al
mov[ebx + 0], ah
add ebx, 3
dec ecx
jnz label
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Microsoft Developer Network ( MSDN ) 有 24 位 RGB 位图,因此在 WINDOWS 上,RGB 数据实际上是向后存储的 (BGR),但在 OpenGL 中,RGB 只是 RGB。
Nehe 使用的解决方案是编写汇编代码,这是一个坏主意,在我看来,因为Visual C++ 不支持 x64 的内联汇编,因此您不能使用 ASM 代码交换字节。您现在可以做的是修改纹理生成代码以使用 GL_BGR 而不是 GL_RGB,但请注意,某些 OpenGL 驱动程序在 GL_BGR 方面存在问题。
因此删除 _asm 函数并将 glTexSubImage2D(...) 函数中的 GL_RGB 更改为 GL_BGR:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 256, GL_BGR, GL_UNSIGNED_BYTE, data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |