我正在尝试在 OpenGL 中制作一个播放器。我使用 ffmpeg 解码视频。
我搜索了几个教程(StackOverflow,....)如何在 OpenGL 中转换我的 pFrameRGB-> 数据 [0] 纹理,但它仍然显示了一个白色方块。我将我的视频转换为 512x256 以符合 2 ^ n。
我知道我的 pFrameRGB 是正确的,因为我可以使用“SaveFrame (...)”函数创建 frameX.ppm。
通过适应我的播放器,我使用以下源代码 ( https://github.com/arashafiei/dranger-ffmpeg-tuto/blob/master/tutorial02.c ) 作为模型。
这是我的源代码:
http://www.sourcepod.com/uagkel22-19078
你们中的一个有解决我的问题的方法吗?
编辑1:
我删除:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 1 ? GL_REPEAT : GL_CLAMP );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 1 ? GL_REPEAT : GL_CLAMP );
并替换:
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, pCodecCtx->width, pCodecCtx->height, 0, GL_RGB, GL_UNSIGNED_BYTE, pFrameRGB->data[0]);
经过:
if(firstRendering){
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, pCodecCtx->width, pCodecCtx->height, 0, GL_RGB, GL_UNSIGNED_BYTE, pFrameRGB->data[0]);
firstRendering = 0;
}else{
glActiveTexture(texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, pCodecCtx->width, pCodecCtx->height, GL_RGB, GL_UNSIGNED_BYTE, pFrameRGB->data[0]);
}
我试着跑,但什么也没有……