Beispiel #1
0
        internal int GetShaderHandle()
        {
            // If the shader has already been created then return it.
            if (_shaderHandle != -1)
            {
                return(_shaderHandle);
            }

            //
            _shaderHandle = GL.CreateShader(Stage == ShaderStage.Vertex ? ShaderType.VertexShader : ShaderType.FragmentShader);
            GraphicsExtensions.CheckGLError();
            GL.ShaderSource(_shaderHandle, _glslCode);
            GraphicsExtensions.CheckGLError();
            GL.CompileShader(_shaderHandle);
            GraphicsExtensions.CheckGLError();
            int compiled = 0;

            GL.GetShader(_shaderHandle, ShaderParameter.CompileStatus, out compiled);
            GraphicsExtensions.CheckGLError();
            if (compiled != (int)Bool.True)
            {
                var log = GL.GetShaderInfoLog(_shaderHandle);
                Debug.WriteLine(log);

                GraphicsDevice.DisposeShader(_shaderHandle);
                _shaderHandle = -1;

                throw new InvalidOperationException("Shader Compilation Failed");
            }

            return(_shaderHandle);
        }
Beispiel #2
0
        internal WebGLShader GetShaderHandle()
        {
            // If the shader has already been created then return it.
            if (gl.isShader(_shaderHandle))
            {
                return(_shaderHandle);
            }

            _shaderHandle = gl.createShader(Stage == ShaderStage.Vertex ? gl.VERTEX_SHADER : gl.FRAGMENT_SHADER);
            GraphicsExtensions.CheckGLError();
            gl.shaderSource(_shaderHandle, _glslCode);
            GraphicsExtensions.CheckGLError();
            gl.compileShader(_shaderHandle);
            GraphicsExtensions.CheckGLError();
            var compiled = (bool)gl.getShaderParameter(_shaderHandle, gl.COMPILE_STATUS);

            GraphicsExtensions.CheckGLError();
            if (!compiled)
            {
                var log = gl.getShaderInfoLog(_shaderHandle);
                Debug.WriteLine(log);

                GraphicsDevice.DisposeShader(_shaderHandle);

                throw new InvalidOperationException("Shader Compilation Failed");
            }

            return(_shaderHandle);
        }
Beispiel #3
0
 private void PlatformGraphicsDeviceResetting()
 {
     if (gl.isShader(_shaderHandle))
     {
         GraphicsDevice.DisposeShader(_shaderHandle);
     }
 }
Beispiel #4
0
 private void PlatformGraphicsDeviceResetting()
 {
     if (_shaderHandle != -1)
     {
         GraphicsDevice.DisposeShader(_shaderHandle);
         _shaderHandle = -1;
     }
 }
Beispiel #5
0
        protected override void Dispose(bool disposing)
        {
            if (!IsDisposed && gl.isShader(_shaderHandle))
            {
                GraphicsDevice.DisposeShader(_shaderHandle);
            }

            base.Dispose(disposing);
        }