Ejemplo n.º 1
0
 public GPUPipeline(GPUEngine engine, GPUShaderProgram shaderProgram, GPUPipelineFormat format, GPUBuffer[] buffers)
 {
     _engine  = engine;
     _program = shaderProgram;
     _format  = format;
     _buffers = buffers;
 }
Ejemplo n.º 2
0
 public void BindShaderProgram(GPUShaderProgram program)
 {
     if (_currentProgram != program)
     {
         Gl.glUseProgram(program);
         _currentProgram = program;
     }
 }
Ejemplo n.º 3
0
        public unsafe GPUShaderProgram CreateShaderProgram(GPUShader vertex, GPUShader fragment, GPUShader geometry = null, GPUShader tessEval = null, GPUShader tessCtrl = null)
        {
            GPUShaderProgram sProgram = new GPUShaderProgram(Gl.glCreateProgram());

            if (vertex != null)
            {
                Gl.glAttachShader(sProgram, vertex);
            }

            if (fragment != null)
            {
                Gl.glAttachShader(sProgram, fragment);
            }

            if (geometry != null)
            {
                Gl.glAttachShader(sProgram, geometry);
            }

            if (tessEval != null)
            {
                Gl.glAttachShader(sProgram, tessEval);
            }

            if (tessCtrl != null)
            {
                Gl.glAttachShader(sProgram, tessCtrl);
            }

            Gl.glLinkProgram(sProgram);
            int success = 1;

            Gl.glGetProgramiv(sProgram, Gl.GL_LINK_STATUS, &success);
            if (success == 0)
            {
                StringBuilder builder = new StringBuilder(512);
                int           length;
                Gl.glGetProgramInfoLog(sProgram, 512, out length, builder);
                Console.WriteLine(builder.ToString());
            }

            return(sProgram);
        }