Example #1
0
        public IBuffer GetVertexBuffer(VertexFormat vertexFormat, BufferUsageHint bufferUsageHint)
        {
            if (Configuration.useGl1 || Configuration.useOpenRL)
            {
                //  \todo Do index remapping due to lack on DrawElementsBaseVertex()
                return(BufferFactory.Create(vertexFormat, bufferUsageHint));
            }
            //return BufferFactory.Create(vertexFormat, bufferUsageHint);
#if true
            lock (this)
            {
                var kvp = new KeyValuePair <VertexFormat, BufferUsageHint>(vertexFormat, bufferUsageHint);
                if (vertexBuffers.ContainsKey(kvp))
                {
                    //Console.WriteLine("Returning old vertex buffer, vertex format = " + vertexFormat.ToString());
                    if (vertexFormat.Stride != vertexBuffers[kvp].VertexFormat.Stride)
                    {
                        throw new Exception("");
                    }
                    return(vertexBuffers[kvp]);
                }
                //Console.WriteLine("Creating new vertex buffer, vertex format = " + vertexFormat.ToString());
                var buffer = BufferFactory.Create(vertexFormat, bufferUsageHint);
                vertexBuffers[kvp] = buffer;
                return(buffer);
            }
#endif
        }
Example #2
0
        public BufferRL GetUniformBufferRL(BufferUsageHint usage)
        {
            //  Current OpenRL API rlUniformBlockBuffer() needs
            //  exactly one buffer object per uniform block
            //  so we can not share the same buffer to multiple
            //  uniform blocks.
            var buffer = new BufferRL(Caustic.OpenRL.BufferTarget.UniformBlockBuffer, (Caustic.OpenRL.BufferUsageHint)usage);

            return(buffer);
        }
Example #3
0
        public BufferGL GetUniformBufferGL(BufferUsageHint usage)
        {
            if (Configuration.useGl1)
            {
                throw new InvalidOperationException("GL1 does not support uniform buffers");
            }
            //return new Buffer(BufferTarget.UniformBuffer, usage);
#if true
            lock (this)
            {
                if (uniformBuffersGL.ContainsKey(usage))
                {
                    //Debug.WriteLine("Returning old uniform buffer, usage = " + usage.ToString());
                    return(uniformBuffersGL[usage]);
                }
                //Debug.WriteLine("Creating new uniform buffer, usage = " + usage.ToString());
                var buffer = new BufferGL(BufferTarget.UniformBuffer, usage);
                uniformBuffersGL[usage] = buffer;
                return(buffer);
            }
#endif
        }
Example #4
0
        public IBuffer GetIndexBuffer(DrawElementsType indexType, BufferUsageHint bufferUsageHint)
        {
            if (RenderStack.Graphics.Configuration.useGl1 || Configuration.useOpenRL)
            {
                //  \todo Do index remapping due to lack on DrawElementsBaseVertex()
                return(BufferFactory.Create(indexType, bufferUsageHint));
            }
//            return new Buffer(indexType, bufferUsageHint);
#if true
            lock (this)
            {
                var kvp = new KeyValuePair <DrawElementsType, BufferUsageHint>(indexType, bufferUsageHint);
                if (indexBuffers.ContainsKey(kvp))
                {
                    //Debug.WriteLine("Returning old index buffer, index type = " + indexType.ToString());
                    return(indexBuffers[kvp]);
                }
                //Debug.WriteLine("Creating new index buffer, index type = " + indexType.ToString());
                var buffer = BufferFactory.Create(indexType, bufferUsageHint);
                indexBuffers[kvp] = buffer;
                return(buffer);
            }
#endif
        }
Example #5
0
 public void BufferData(System.Single[] data, OpenTK.Graphics.OpenGL.BufferUsageHint usageHint)
 {
     OpenTK.Graphics.OpenGL.GL.BindBuffer(this.Type, this.Address);
     OpenTK.Graphics.OpenGL.GL.BufferData(this.Type, data.Length * sizeof(System.Single), data, usageHint);
 }