Я не могу найти, где не так в моем коде GLSL? - PullRequest
3 голосов
/ 22 июня 2019

Я разработчик iOS, использую Xcode для компиляции некоторого GLSL кода.Код shaderv.vsh любит ниже:

attribute vec4 position;
attribute vec4 positionColor;
attribute vec2 textCoordinate;
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
varying lowp vec2 varyTextCoord;
varying lowp vec4 varyColor;

void main() {
    varyTextCoord = textCoordinate;
    varyColor = positionColor;

    vec4 vPos;
    vPos = projectionMatrix * modelViewMatrix * position;
    gl_Position = vPos;
}

А код shaderf.fsh нравится ниже:

precision lowp float;

varying lowp vec2 varyTextCoord;
varying lowp vec4 varyColor;
uniform sampler2D colorMap;

void main() {
    vec4 cs = texture2D(colorMap,varyTextCoord);
    vec4 cd = varyColor;
    float s = 0.2;
    float d = 0.5;
    vec4 color = (cs * s) + (cd * d);
    gl_FragColor = color;
}

При компиляции этого кода будет возникать ошибка:

ERROR: 0:15: 'premature EOF' : syntax error syntax error

ERROR: 0:5: 'premature EOF' : syntax error syntax error

Я не могу найти, где это не так.Это беспокоило меня долгое время.Помоги мне!

1 Ответ

0 голосов
/ 23 июня 2019

Я решил эту проблему.Мой код шейдера правильный.Одна swift функция, которую я использовал по ошибке.

let content = try? String(contentsOfFile: file, encoding: String.Encoding.utf8)
var source = UnsafePointer<GLchar>(content)
shader = glCreateShader(type)

glShaderSource(shader, 1,&source, nil)

При компиляции shader string, я должен преобразовать ее в cString.

let content = try? String(contentsOfFile: file, encoding: String.Encoding.utf8)
let contentCString = content?.cString(using: .utf8)
var source = UnsafePointer<GLchar>(contentCString)

Спасибомне все намекали.

...