簡體   English   中英

Qt中的OpengGL glDrawBuffers()?

[英]OpengGL glDrawBuffers() in Qt?

是Qt中可用的OpenGL函數glDrawBuffers(GLsizei n,const GLenum * bufs)? 我正在嘗試將多個渲染目標傳遞給我的片段着色器,QtCreator表示該函數未在此范圍內聲明。 我們的想法是擁有一個帶有兩個顏色緩沖區的幀緩沖區對象,並使用片段着色器繪制到這兩個緩沖區。

修復:只需要將#define GL_GLEXT_PROTOTYPES 1添加到有問題的文件中:(

Qt僅提供對OpenGL功能的基本訪問。 加載着色器和紋理是其中之一。 渲染目標不是。 只需使用適當的擴展加載程序庫,如GLEW。 GLEW將很好地與Qt的功能共存。

從QGLWidget派生並覆蓋glInit ,在調用initializeGL后調用glewInit

我們花了一些時間來解決這個問題。 我們在OSX 10.8Ubuntu 14.04上運行Qt 5.2.1(抱歉沒有WINDOWS體驗)並使用QGLFormat創建了一個OpenGL3.2上下文。

OSX中沒有問題,因為所有OpenGL3.2函數(設置制服,繪制緩沖區等)都定義在:

#include "OpenGL/gl3.h" ///< already included by Qt.. so nothing to do

Linux上。另一方面,我們必須包括這兩種

#include "GL/gl.h"
#include "GL/glext.h" ///< not included by Qt!!! manually include it

我們也試圖QGLFunctions_3_2_Core有我們QGLWidget來繪圖類繼承(這個類定義了自己的glDrawBuffer等等復印件),但這是不是有用,只是導致了段錯誤

Program received signal SIGSEGV, Segmentation fault. 0x0000000000407068 
in glGetUniformLocation (this=0xbc5820, name=0x407cd0 "view_projection", program=1) 
at /usr/include/qt5/QtGui/qopenglfunctions_3_2_core.h:1075 1075     
return d_2_0_Core->GetUniformLocation(program, name);

我們還調查了上面的“#define GL_GLEXT_PROTOTYPES 1”,但這只在我們使用glcorearb.h時才有用(您可以在線下載此標題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM