使用汇编代码在OpenGL中渲染视频时出错

我遵循Nehe的本教程,以便在OpenGL中渲染视频。我正在尝试在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
    }
}
jiahua004 回答:使用汇编代码在OpenGL中渲染视频时出错

Microsoft Developer Network( MSDN )具有RGB的24位位图,因此在WINDOWS上,RGBs数据实际上是向后存储(BGR)的,但是在OpenGL中,RGB只是RGB。

Nehe使用的解决方案是编写汇编代码,在我看来,这是个坏主意,因为Visual C++ does not support inline assembly for x64,所以您不能使用ASM代码交换字节。您现在可以做的是修改纹理生成代码以使用GL_BGR而不是GL_RGB,但是要小心,某些OpenGL驱动程序存在GL_BGR问题。

因此,请删除_asm函数,然后在glTexSubImage2D(...)函数中将GL_RGB更改为GL_BGR

glTexSubImage2D(GL_TEXTURE_2D,256,GL_BGR,GL_UNSIGNED_BYTE,data);
本文链接:https://www.f2er.com/3157078.html

大家都在问