2017-04-25 50 views
0

我成功安裝了UnixBench沒有GRAPHIC_TESTS到iMX6 Yocto。 Previous question.如何用OpenGL交叉編譯UnixBench?

當我試圖啓用GRAPHIC_TESTS,我得到這個錯誤:

fatal error: GL/gl.h: No such file or directory 

所以我添加的OpenGL包括路徑進入的Makefile這樣的:

CFLAGS = \ 
-I/opt/poky/1.6.2/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include \ 
-march=armv7-a -mtune=cortex-a9 

飛思卡爾iMX6 yocto貌似不支持OpenGL的。所以改變了這個:

# GL_LIBS = -lGL -lXext -lX11 
# to this ↓ 
GL_LIBS = -lGLESv2 -lEGL -lGAL -lXext -lX11 

,改變了源代碼:

//#include <GL/gl.h> 
//#include <GL/glx.h> 
// to this ↓ 
#include <GLES2/gl2.h> 
#include <GLES2/gl2ext.h> 

然後我得到了一個新的錯誤:

src/ubgears.c: In function 'gear': 
src/ubgears.c:163:17: error: 'GL_FLAT' undeclared (first use in this function) 
    glShadeModel(GL_FLAT); 
       ^
src/ubgears.c:163:17: note: each undeclared identifier is reported only once for each function it appears in 
src/ubgears.c:168:12: error: 'GL_QUAD_STRIP' undeclared (first use in this function) 
    glBegin(GL_QUAD_STRIP); 
      ^
src/ubgears.c:182:12: error: 'GL_QUADS' undeclared (first use in this function) 
    glBegin(GL_QUADS); 
      ^
src/ubgears.c:267:17: error: 'GL_SMOOTH' undeclared (first use in this function) 
    glShadeModel(GL_SMOOTH); 
       ^
src/ubgears.c: In function 'reshape': 
src/ubgears.c:320:17: error: 'GL_PROJECTION' undeclared (first use in this function) 
    glMatrixMode(GL_PROJECTION); 
       ^
src/ubgears.c:327:17: error: 'GL_MODELVIEW' undeclared (first use in this function) 
    glMatrixMode(GL_MODELVIEW); 
       ^
src/ubgears.c: In function 'init': 
src/ubgears.c:341:14: error: 'GL_LIGHT0' undeclared (first use in this function) 
    glLightfv(GL_LIGHT0, GL_POSITION, pos); 
      ^
src/ubgears.c:341:25: error: 'GL_POSITION' undeclared (first use in this function) 
    glLightfv(GL_LIGHT0, GL_POSITION, pos); 
         ^
src/ubgears.c:343:13: error: 'GL_LIGHTING' undeclared (first use in this function) 
    glEnable(GL_LIGHTING); 
      ^
src/ubgears.c:349:21: error: 'GL_COMPILE' undeclared (first use in this function) 
    glNewList(gear1, GL_COMPILE); 
        ^
src/ubgears.c:350:27: error: 'GL_AMBIENT_AND_DIFFUSE' undeclared (first use in this function) 
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); 
         ^
src/ubgears.c:366:13: error: 'GL_NORMALIZE' undeclared (first use in this function) 
    glEnable(GL_NORMALIZE); 
      ^
src/ubgears.c: At top level: 
src/ubgears.c:378:30: error: unknown type name 'GLXContext' 
       Window *winRet, GLXContext *ctxRet) 
          ^
src/ubgears.c: In function 'main': 
src/ubgears.c:561:4: error: unknown type name 'GLXContext' 

這個代碼也許只使用OpenGL的不OpenGLES。

如果有人對此有所瞭解,請分享。

更新:

有一個在Yocto glxgears -info,我檢查源代碼here。它由OpenGL編寫而不是OpenGL ES! iMX6應該只支持OpenGL ES。怎麼運行的?

解決方案: 這是我的錯誤。我指出了錯誤的OpenGL庫和頭文件。

# GL_LIBS = -lGL -lXext -lX11 
# to this ↓ 
GL_LIBS = -lXext -lX11 /work/fsl-release-bsp/build-x11/tmp/sysroots/imx6qsabresd/usr/lib/libGL.so 

回答

1

看起來您正在嘗試爲OpenGL ES平臺編譯OpenGL代碼;這兩個不兼容,所以這不起作用。

+0

freescale iMX6 GPU只支持OpenGL ES,那麼有沒有關於將OpenGL轉換爲OpenGL ES的文檔? – Jiu

+0

沒有文檔 - 這不是一個簡單的轉換(OpenGL中很多功能並不存在於OpenGL ES中,尤其是2.0以後,它刪除了固定功能路徑)。基於使用的函數,它看起來好像你的代碼使用了固定的函數邏輯,所以我開始看OpenGL ES 1.1,而不是2.0。 – solidpixel

+0

另外,您不僅需要修復代碼,您的模型數據可能需要更改。它看起來像你的代碼使用了GL ES中不存在的GL_QUADS(和相關的);您需要對模型進行三角測量並使用GL_TRIANGLES。 – solidpixel