簡體   English   中英

OpenGL Shader編譯代碼在哪里?

[英]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.

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