2016-04-13 3 views
1

у меня есть какая-то проблема может быть, синтаксис может быть, логика не знает, но мои шейдеры не компиляции, когда она проходит через консоль, может быть кто-то знает, Что происходит, я последовал за учебник на Youtube: WebGl Tutorialшейдеров не компиляции

var vertexShaderText = 
[ 
'precision mediump float;', 
'', 
'attribute vec2 vertPosition;', 
'', 
'void main()', 
'{', 
'gl_position = vec4(vertPosition,0.0,1.0);', 
'}' 
].join('\n'); 

var fragmentShaderText = 
[ 
'precision mediump float;', 
'', 
'void main()', 
'{', 
'gl_FragColor = vec4(1.0,0.0,0.0,1.0);', 
'}' 
].join('\n'); 

var initDemo = function() 
{ 
    console.log("this is working"); 
    var canvas = document.getElementById("myCanvas"); 
    var gl = canvas.getContext("webgl"); 

if(!gl) 
{ 
    console.log("your browser doesnt support webgl, trying expermiental"); 
    gl = canvas.getContext("experimental-webgl"); 
} 

if(!gl) 
{ 
    alert("your bwoser doesnt support webgl"); 
} 

gl.clearColor(0,1,0,1); 
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 

// create shadders 
var vertexShader = gl.createShader(gl.VERTEX_SHADER); 
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); 

gl.shaderSource(vertexShader,vertexShaderText); 
gl.shaderSource(fragmentShader,fragmentShaderText); 

    console.log(fragmentShader); 

if(!gl.getShaderParameter(vertexShader,gl.COMPILE_STATUS)) 
{ 
    console.error("Error compiling",gl.getShaderInfoLog(vertexShader)); 
} 

gl.compileShader(vertexShader); 
gl.compileShader(fragmentShader); 

var program = gl.createProgram(); 
gl.attachShader(program,vertexShader); 
gl.attachShader(program,fragmentShader); 
gl.linkProgram(program); 

if(!gl.getProgramParameter(program,gl.LINK_STATUS)) 
{ 
    console.error("Error linking program",gl.getProgramInfoLog(program)); 
    return; 
} 
gl.validateProgram(program); 
    if(!gl.getProgramParameter(program,gl.LINK_STATUS)) 
{ 
    console.error("Error linking program",gl.getProgramInfoLog(program)); 
    return; 
} 

var triangleVertices = 
[ 
    0.0,0.5, 
    0.5,0.5, 
    0.5,-0.5 
] 

var triangleVertexBufferObject = gl.createBuffer(); 
gl.bindBuffer(gl.ARRAY_BUFFER,triangleVertexBufferObject); 
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertices),gl.STATIC_DRAW); 

var positionAtribLocation = gl.getAttribLocation(program,'vertPosition'); 
gl.vertexAttribPointer(
positionAtribLocation, 
2, 
gl.FLOAT, 
gl.FALSE, 
2 * Float32Array.BYTES_PER_ELEMENT, 
0 
); 

gl.enableVertexAttribArray(positionAtribLocation); 

gl.useProgram(program); 
gl.drawArrays(gl.TRIANGLES,0,3); 


} 
+0

Запрос 'gl.getShaderInfoLog (...)' и вы получите ошибку компиляции. – BDL

+0

как я могу это сделать? извините, но im kinda new: S –

+0

[возможно, вы захотите посмотреть на это] (http://webglfundamentals.org/webgl/lessons/webgl-boilerplate.html) – gman

ответ

0

ошибки компиляции для шейдеров могут быть запрошены с помощью следующего кода:

var error_log = gl.getShaderInfoLog(vertexShader); 
console.log(error_log); 

В вашем случае, вы, по крайней мере, написано gl_position вместо gl_Position.

+0

да я поймал эту проблему 1 мин. назад, похоже, что у меня есть не проблема с этим кодом даже на вершине даже на фрагменте, но с моей проверкой кода console.error поймал меня на проблему: S –

+0

i thaught У меня была ошибка при компиляции, потому что мой треугольник рисуется странным образом: S –

-1

Шлейфы GLSL должны иметь префикс #version xxx Чтобы скомпилировать.

В целях безопасности, когда я пишу GLSL шейдеры, я обычно пишу их так:

#version 400 core 
layout(location = 0) in vec3 vertex; 

void main() { 
    gl_Position = vec4(vertex, 1); 
} 

И я обновляю число, если мне нужна функциональность, которая не доступна в GL4.0

Также , как уже указывал еще один ответ, вы написали gl_position вместо gl_Position

+0

hmmm thank вы, его действительно странный webgl, и я не могу рассчитывать на интеллектуальность редактора –

+0

Не в WebGL 1.0 #version не разрешено. – gman

Смежные вопросы