所以我正在制作一个可以使用 directx10,11 和 opengl 的引擎。
到目前为止一切都很顺利。它可以正确渲染 opengl 和 directx 中的图像,并且两者看起来相同。
现在我添加了渲染目标。在 DirectX 中它运行得很好并且到目前为止没有任何问题。但是使用 OpenGL,我之前绘制的纹理是颠倒的,位于渲染目标的右下角。

你们知道问题是什么吗?为什么它在没有渲染目标的情况下也能正常工作?
如果需要我可以发送一些代码。我只需要先排序。
我有一个RaspberryPi,想在没有xserver的情况下全屏显示图像-因此直接将其写入帧缓冲区。没问题
但是将其全屏设置是行不通的。
cat /sys/class/graphics/fb0/modes
Run Code Online (Sandbox Code Playgroud)
产量:
U:1024x768p-0
U:1920x1200p-0
U:1920x1080p-0
U:608x684p-0
Run Code Online (Sandbox Code Playgroud)
所以我用
fbset -xres 1920 -yres 1200 -match
Run Code Online (Sandbox Code Playgroud)
导致
>>fbset
mode "1920x1200"
geometry 1920 1200 1920 1200 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/16
endmode
Run Code Online (Sandbox Code Playgroud)
如果我现在用于fbi显示图像,或仅填充framebuffer /dev/urandom >> /dev/fb0,则仅填充部分屏幕。显示部分的长宽比等正确,周围只有一个大的黑色边界。
如果我使用其他分辨率,一切都会按预期运行,例如fbi中的stats-line变大等。
我做错了什么?
我正在开发一个小游戏开发库。该库的元素之一是 Canvas(屏幕外绘图区),它是通过 OpenGL 帧缓冲区实现的。到目前为止,一切都很好,我生成了一个纹理,将它附加到帧缓冲区,渲染到它,然后使用帧缓冲区的纹理作为 Texture2D。
现在,我想向我的库中添加抗锯齿功能,因此我希望能够在 Canvas 上设置多重采样。现在我很困惑,因为我发现您需要更改着色器以使用多样本纹理等等。
那么,我应该怎么做才能为我的帧缓冲区启用多重采样,以便我尽量减少对库的其余代码的更改?如果可能,我只想将渲染结果用作常规 Texture2D。
我在我的 ARM 目标上使用了 linux 3.14 版本,我想使用帧缓冲区在显示器中显示一些字符行。我可以使用以下代码更改显示器的颜色。
#include <stdio.h>
unsigned char colours[8][4] = {
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
{ 0x00, 0xFF, 0x00, 0xFF }, // green
};
int frames[] …Run Code Online (Sandbox Code Playgroud) 我正在使用openGL ES 2.0和GLSL着色器,并使用Renderbuffer(即屏幕外渲染)处理FBO.
它以30 fps工作正常.
但是当我使用glReadPixels或glcopyteximage2d时,它会下降到8 fps.
我做了类似的事情:
glBindFramebuffer(GL_FRAMEBUFFER, frameBuf);
//DRAW something
glReadPixels(...); //HERE
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
无论如何我可以提高速度吗?我的意思是当我不使用FBO并使用相同参数的glReadPixels时,它的工作速度为15 fps,我认为使用FBO可以提高速度吗?
我正在尝试将具有内部格式的纹理附加GL_R32UI到帧缓冲区,以用作ID缓冲区。但是,即使它是唯一的附件,也要glCheckFramebufferStatus不断提出GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT。
这对我来说很奇怪,因为OpenGL 4.2规范似乎GL_R32UI表明OpenGL实现是附加到帧缓冲区时OpenGL实现必须支持的格式之一。我怀疑这是驱动程序错误。我是对的,还是有人可以告诉我我所忽略的东西?
我收到此错误:
"访问冲突执行位置0x00000000."
当我在Windows上使用GLFW + GLEW时.
我正在使用Windows 7.我也有自己的实现(从头开始)创建一个窗口,初始化OpenGL上下文,初始化GLEW等等......一切正常.所以当然我的视频卡具有帧缓冲功能,驱动程序的一切都很好......问题只发生在我尝试使用GLFW时.
有什么建议吗?
代码:
void start()
{
if( !glfwInit() )
{
glfwTerminate();
throw exception( "Failed to initialize GLFW" );
}
glfwOpenWindowHint( GLFW_FSAA_SAMPLES, 4 );
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MAJOR, 3 );
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MINOR, 3 );
glfwOpenWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
if( !glfwOpenWindow( m_width, m_height, 0, 0, 0, 0, 32, 0, GLFW_WINDOW ) )
{
throw exception( "Failed to open GLFW window." );
glfwTerminate();
}
if ( glewInit() != GLEW_OK )
{
throw exception( "Failed to initialize GLEW" );
} …Run Code Online (Sandbox Code Playgroud) 我能够得到android framebuffer.But我不知道如何将这些原始字节转换为jpg图像文件.如果我尝试使用java bufferedImage.setpixel方法在我的笔记本电脑上绘制图像.我得到不正确的彩色图像
Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream os = sh.getOutputStream();
os.write("/system/bin/cat /dev/graphics/fb0 > /sdcard/img.raw".getBytes());
os.flush();
os.close();
sh.waitFor();`
Run Code Online (Sandbox Code Playgroud) 我有两个2D纹理.第一个是MSAA纹理,使用的是目标GL_TEXTURE_2D_MULTISAMPLE.第二个非MSAA纹理使用目标GL_TEXTURE_2D.
根据OpenGL 关于ARB_texture_multisample的规范,GL_NEAREST在绘制MSAA纹理时,只有一个有效的过滤选项.
在这种情况下,这两个纹理都GL_COLOR_ATTACHMENT0通过各自的Framebuffer对象附加.他们的分辨率也是相同的大小(根据我的知识,这对于将MSAA与非MSAA联系起来是必要的).
因此,考虑到当前的限制,如果我将MSAA保持FBO到非MSAA持有FBO,我仍然需要GL_NEAREST用作过滤选项,或者是否GL_LINEAR有效,因为两个纹理都已经被渲染到?
我这里有一个有趣的问题。我发现了很多线程,人们可以在其中隐藏或摆脱嵌入式Qt GUI上的游标...但是我试图使游标显示在嵌入式Qt GUI上。
我继承了一个在一段时间前“完成”的项目,而在该项目上做最多工作的人已经继续前进。快进到今天,需要在此功能性触摸屏GUI中添加光标。系统操作系统是Yocto Linux,并且在帧缓冲区上运行Qt 5.4应用程序。
我已经搜索了Qt代码,那里没有任何东西可以隐藏光标。我已经在Qt启动脚本中添加了适当的QT_QPA_FB_HIDECURSOR = 0环境变量。我已经尝试过向GUI添加QCursor对象。不幸的是,这些都不起作用。使用QCusor,我有时可以在屏幕上向上移动光标,但并不局限于触摸输入(光标显示在我以编程方式将其移动到的位置,但是当我与GUI交互时会停留在该位置) 。
我的触摸输入事件绑定到Qt(通过QT_QPA_GENERIC_PLUGINS = evdevtouch和QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS = / dev / input / event9:rotate = 180),但是由于某些原因触摸输入无法绑定到光标。
在这一点上,我花了几天时间弄乱环境变量和启动脚本修改,但是我所做的一切都没有得到我想要的结果。
是否有人在哪里寻找解决此问题的方法的想法?
谢谢!伊恩