当前位置: 首页 > 知识库问答 >
问题:

使用SDL2和Xcode4.6。我设法创建了一个OpenGL3.2核心上下文。但不能使用GLSL1.50

汝墨一
2023-03-14
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

我仔细检查了一下,现在固定管道调用是没用的。到目前为止,一切都很好。

问题是当我尝试使用GLSL1.50着色器时。它无法编译,并给出了一些类似于(对不起,前面没有错误)的错误:错误0:2语法错误语法错误

着色器加载代码如下所示:

char* filetobuf(char *file)
{
    FILE *fptr;
    long length;
    char *buf;

    fptr = fopen(file, "rb"); /* Open file for reading */
    if (!fptr) /* Return NULL on failure */
        return NULL;
    fseek(fptr, 0, SEEK_END); /* Seek to the end of the file */
    length = ftell(fptr); /* Find out how many bytes into the file we are */
    buf = (char*)malloc(length+1); /* Allocate a buffer for the entire length of the file and a null terminator */
    fseek(fptr, 0, SEEK_SET); /* Go back to the beginning of the file */
    fread(buf, length, 1, fptr); /* Read the contents of the file in to the buffer */
    fclose(fptr); /* Close the file */
    buf[length] = 0; /* Null terminator */

    return buf; /* Return the buffer */
}
vertex shader
#version 150 core
 
uniform mat4 viewMatrix, projMatrix;
 
in vec4 position;
in vec3 color;
 
out vec3 Color;
 
void main()
{
    Color = color;
    gl_Position = projMatrix * viewMatrix * position ;
}

fragment shader:
#version 150 core
 
in vec3 Color;
out vec4 outputF;
 
void main()
{
    outputF = vec4(Color,1.0);
}

的确,在读取着色器文件中出现了一些错误,因为我刚刚创建了一个常量字符*并在其中编写了整个着色器,并将引用传递给glShaderSource(),现在它可以工作了。有趣的是,我仍然不明白filetobuf()有什么问题(我应用了Armin fix)。

共有1个答案

柴修筠
2023-03-14

您错误地使用了fread()。

而不是

fread(buf, length, 1, fptr); 

应该是

fread(buf, 1, length, fptr); 
 类似资料:
  • 我正在开发一个利用和的项目。为了在我的程序中使用顶点和片段着色器,我需要使用的最小OpenGL版本是。我检查了OpenGL版本和GLSL版本,结果如下: 我在Linux操作系统上使用Eclipse作为我的C++开发IDE(我使用的这个特定的disdo是PCLinuxOS)。

  • 我的问题是:为什么我不能自动连接我的地图与接口,而我可以与实现? 多谢了。

  • 我已经安装node.js.节点似乎工作正常,但是,没有找到npm,如下所示。 我尝试了多种解决方案,如所介绍的: 1-Windows-安装node.js但找不到npm 2-安装节点。Windows 10上的js(和npm) 我不知道下一步该怎么办 谢谢你的协助 下面是路径下的变量 如下所示,我使用了

  • 我很难让swashbuckle.aspnetcore(1.0.0)包生成任何输出。我读到swagger.json文件应该写到'~/swagger/docs/v1'。然而,我没有得到任何输出。 我从一个全新的ASP.NET核心API项目开始。我应该提到这是ASP.NET Core2。API可以工作,我可以从values控制器检索值。 我的启动类的配置与本文描述的完全相同(GitHub上的swashb

  • 我使用简单的代码使用PyStudio使用GeopDaas和菲奥娜作为导入来创建EXE。 示例代码: 我无法使用PyInstaller为此示例代码创建exe,因为geopandas导致了问题。我做了一些改变。规格文件根据这里的一篇文章。这使我能够使用以下方法创建exe。等级库文件内容: 创建exe后,我无法执行exe,因为它会出现以下错误: 文件“菲奥娜\OGRXX.PYX”,第1行,在init菲奥

  • 我正在尝试使用 SDL2 TTF 和 OpenGL 显示文本。窗口中出现了一个奇怪的纹理,它有正确的大小和正确的位置,但你看不到任何字母。 我尝试过使用SDL_CreateRGBSurface(),认为这可能是一种更干净的方式来恢复像素,但它也不起作用。我的表面从不为空,并且总是通过验证测试。 我在 while() 循环之前使用 get_front() 函数,在使用 glClear(GL_COLO