[英]Where is OpenGL Shader Compilation code located?
我懷疑我的opengl頭文件中可能缺少代碼,或者我的編譯無法查詢和加載與着色器編譯有關的代碼。 我正在使用簡單DirectMedia層,並且可以編寫和運行所有OpenGL代碼的簡短內容-直到接觸着色器為止。 我有一個遇到同樣問題的朋友。 當我到達着色器時,我得到了很多未聲明的語句:
$ make
cc -c -o proceduralTexture.o proceduralTexture.c
proceduralTexture.c: In function 'PrintShaderLog':
proceduralTexture.c:60:22: error: 'GL_INFO_LOG_LENGTH' undeclared (first use in
this function)
glGetShaderiv(obj,GL_INFO_LOG_LENGTH,&len);
^
proceduralTexture.c:60:22: note: each undeclared identifier is reported only onc
e for each function it appears in
proceduralTexture.c:70:22: error: 'GL_COMPILE_STATUS' undeclared (first use in t
his function)
glGetShaderiv(obj,GL_COMPILE_STATUS,&len);
^
proceduralTexture.c: In function 'PrintProgramLog':
proceduralTexture.c:76:23: error: 'GL_INFO_LOG_LENGTH' undeclared (first use in
this function)
glGetProgramiv(obj,GL_INFO_LOG_LENGTH,&len);
^
proceduralTexture.c:85:23: error: 'GL_LINK_STATUS' undeclared (first use in this
function)
glGetProgramiv(obj,GL_LINK_STATUS,&len);
^
proceduralTexture.c: In function 'SDL_main':
proceduralTexture.c:430:34: error: 'GL_FRAGMENT_SHADER' undeclared (first use in
this function)
_procShader = glCreateShader(GL_FRAGMENT_SHADER);
^
proceduralTexture.c:438:34: error: 'GL_VERTEX_SHADER' undeclared (first use in t
his function)
_vertShader = glCreateShader(GL_VERTEX_SHADER);
^
make: *** [proceduralTexture.o] Error 1
我有OpenGL 4.2版。 我包含在proceduralTexture.c中的文件是:
#include <stdio.h>
#include <math.h>
#include "SDL/SDL.h"
#include <GL/gl.h>
#include <GL/glu.h>
我的makefile看起來像這樣:
proceduralTexture: proceduralTexture.o
# Windows
gcc -Wall -O3 -o $@ $^ -lopengl32 -lmingw32 -lSDLmain -lSDL -lSDL_mixer -lz
我想念什么?
我想念什么?
在大多數操作系統中,適用於OpenGL的應用程序二進制接口(ABI)僅適用於1.1或1.2版,晚於該版本的版本附帶的所有內容都必須在運行時加載。 這稱為擴展機制 。
MacOS X是一個例外,其中可用的OpenGL版本直接由OS版本確定,並且OpenGL框架將已經滿足該特定版本的所有需求。
獲得現代OpenGL功能的最簡單方法是使用擴展程序loader-wrapper。 不幸的是,最受歡迎的(GLEW)仍然不能完全涵蓋核心配置文件(您必須啟用實驗功能)。 但是,要使着色器正常工作就足夠了。
因此,我建議轉到GLEW主頁, 首先閱讀所有文檔,然后下載GLEW 源代碼 (不要擔心預構建的二進制庫版本),將源代碼添加到項目中並以靜態版本使用它。 創建OpenGL上下文后,請調用glewInit()
,並將其覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.