示例#1
0
        public void Make(string [] shadersList)
        {
            Queue <Resource> resourceList = new Queue <Resource>();

            foreach (string fileName in shadersList)
            {
                Resource res    = Resource.Get(fileName);
                Shader   shader = ( Shader )( ResourceShader )res;
                this.AttachShader(shader, false);
                resourceList.Enqueue(res);
            }
            this.LinkProgram();
            foreach (Resource res in resourceList)
            {
                res.Dispose();
            }
        }
示例#2
0
        public ResourceMaterial(string name, string source)
            : base(name)
        {
            this.type              = ResourceType.MATERIAL;
            this.material          = new Material(name);
            this.material.resource = this;
            this.IsValid           = true;

            var linesList = source.Split('\n');
            var parser    = new TextParser();
            var data      = parser.ParseText(source);

            foreach (var pair in data)
            {
                switch (pair.Key)
                {
                case "shader":
                {
                    this.material.shader = ( ShaderProgram )Resource.Get(pair.Value);
                }
                break;

                default: //textures
                {
                    Console.WriteLine("pair.Value = {0}", pair.Value);
                    Texture texture = ( Texture )Resource.Get(pair.Value);
                    Console.WriteLine(texture == null ? "null" : "not null");
                    texture.resource.Inc();
                    this.material.AddTexture(pair.Key, texture);
                    //this.texturesList.Add( pair.Key, texture );
                    //this.material.shader.AddUniform( new ShaderProgramUniformTexture( pair.Key, texture ) );
                }
                break;
                }
            }
        }
示例#3
0
文件: Core.cs 项目: KoMaTo3/csgl
        public unsafe Core()
            : base(200, 200, GraphicsMode.Default, "Flat engine", GameWindowFlags.FixedWindow, DisplayDevice.Default, 3, 3, GraphicsContextFlags.ForwardCompatible)
        {
            this.VSync                    = VSyncMode.Off;
            this.timeRenderInfo           = new Stopwatch();
            this.timeUpdateInfo           = new Stopwatch();
            this.isValid                  = true;
            this.objects                  = new ObjectManager();
            Parameters.tboObjectsMatrices = new TextureBufferObject("objectsData");
            Parameters.worldMatrix        = new ValueMatrix4();
            Parameters.interfaceMatrix    = new ValueMatrix4();
            Parameters.projectionMatrix   = new ValueMatrix4();
            this.staticData.t             = new ValueFloat();
            this.staticData.x             = new ValueFloat();
            this.staticData.position      = new Vector3(0.0f, 0.0f, -70.0f);
            this.staticData.rotation      = new Vector3(0.0f, 0.0f, 0.0f);
            this.staticData.FOV           = 0.02f;
            this.staticData.zNearPlane    = 1.0f;

            Console.WriteLine("load first resource...");
            //( ( ShaderProgram ) ( ResourceShaderProgram ) Resource.Get( "main.sp" ) ).Use();
            //Resource.Get( "test.tga" );

            GL.Enable(EnableCap.Blend);
            GL.Enable(EnableCap.DepthTest);
            GL.DepthFunc(DepthFunction.Less);
            GL.DepthMask(true);
            GL.FrontFace(FrontFaceDirection.Ccw);
            GL.CullFace(CullFaceMode.FrontAndBack);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

            this.timeRenderInfo.Start();
            this.timeUpdateInfo.Start();

            Texture.TextureType2uniformName.Add(TextureType.TEXTURE0, "texture0");
            Texture.TextureType2uniformName.Add(TextureType.TEXTURE1, "texture1");
            Texture.TextureType2uniformName.Add(TextureType.TEXTURE2, "texture2");
            Texture.TextureType2uniformName.Add(TextureType.TEXTURE3, "texture3");

            Object obj;

            obj          = this.objects.CreateObject("floor0", ( Model )Resource.Get("models/floor.model"));
            obj.position = new Vector3(0.0f, -1.0f, 0.0f);
            obj.scale    = new Vector3(5.0f, 5.0f, 1.0f);
            obj.rotation = new Vector3(Tools.Deg2Rag(-90.0f), 0.0f, 0.0f);

            obj          = this.objects.CreateObject("obj3", ( Model )Resource.Get("models/cube.model"));
            obj.position = Vector3.Zero;
            obj.scale    = new Vector3(0.3f, 0.3f, 0.3f);
            obj.rotation = Vector3.Zero;
            //obj.material = ( Material ) Resource.Get( "materials/main-2.mat" );
            //obj.mesh = ( Mesh ) Resource.Get( "meshes/test.mesh" );

            obj          = this.objects.CreateObject("obj4", ( Model )Resource.Get("models/cube.model"));
            obj.position = new Vector3(1.0f, -0.1999f, 0.0f);
            obj.scale    = new Vector3(0.1f, -0.8f, 0.5f);
            obj.rotation = Vector3.Zero;

            obj          = this.objects.CreateObject("obj5", ( Model )Resource.Get("models/cube.model"));
            obj.position = new Vector3(-1.0f, -0.5999f, 0.0f);
            obj.scale    = new Vector3(0.1f, -0.4f, 0.5f);
            obj.rotation = Vector3.Zero;

            obj          = this.objects.CreateObject("ui/top", ( Model )Resource.Get("models/sprite.model"));
            obj.position = new Vector3(0.0f, 0.9f, 0.0f);
            obj.scale    = new Vector3(1.0f, 0.1f, 1.0f);
            obj.rotation = new Vector3(0.0f, 0.0f, 0.0f);

            obj          = this.objects.CreateObject("ui/bottom", ( Model )Resource.Get("models/sprite.model"));
            obj.position = new Vector3(0.0f, -0.9f, 0.0f);
            obj.scale    = new Vector3(1.0f, 0.1f, 1.0f);
            obj.rotation = new Vector3(0.0f, 0.0f, 0.0f);

            obj          = this.objects.CreateObject("ui/button/0", ( Model )Resource.Get("models/sprite.model"));
            obj.position = new Vector3(-0.8f, -0.9f, -0.01f);
            obj.scale    = new Vector3(0.05f, 0.05f, 1.0f);
            obj.rotation = new Vector3(0.0f, 0.0f, Tools.Deg2Rag(45.0f));

            //obj.material = ( Material ) Resource.Get( "materials/main-2.mat" );
            //obj.mesh = ( Mesh ) Resource.Get( "meshes/test.mesh" );
            //( ( Material ) Resource.Get( "main-2.mat" ) ).Apply();

            this.staticData.t.value = 0;

            vao = GL.GenVertexArray();
            GL.BindVertexArray(vao);
            vbo = new int[3];
            GL.GenBuffers(3, vbo);

            Console.WriteLine(Matrix4.CreateFromQuaternion(Quaternion.FromAxisAngle(new Vector3(1.0f, 1.0f, 1.0f), 0.5f)));

            /* float [] vertPos = {
             * -1.0f, -1.0f,
             * 1.0f, -1.0f,
             * -1.0f,  1.0f,
             * 1.0f,  1.0f,
             * };
             *
             * float [] vertColor = {
             * 1.0f, 0.0f, 0.0f, 1.0f,
             * 0.0f, 1.0f, 0.0f, 1.0f,
             * 0.0f, 0.0f, 1.0f, 1.0f,
             * 1.0f, 1.0f, 1.0f, 1.0f,
             * };
             *
             * UInt32 [] index2matrix = {
             * 0, 0, 0, 0,
             * }; */

            /* float [] testTbo = new float[ 1024 * 1024 ];
             * for( int q = 0; q < testTbo.Length; ++q ) {
             * testTbo[ q ] = 0.3f;
             * } */

            //modelMatrix

            /* Matrix4 [] matrixArray = {
             * Tools.MakeMatrix( new Vector3( 0.5f, 0.0f, 0.0f ), new Vector3( 0.7f, 0.2f, 1.0f ), ( float ) ( 22.0f * Math.PI / 180.0f ) ),
             * Tools.MakeMatrix( new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.7f, 0.2f, 1.0f ), ( float ) ( -22.0f * Math.PI / 180.0f ) ),
             * Tools.MakeMatrix( new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.3f, 0.3f, 1.0f ), 0.0f ),
             * };
             * UInt32 index = 0;
             * foreach( Matrix4 matrix in matrixArray ) {
             * Parameters.tboObjectsMatrices.SetData( matrix, index++ );
             * } */

            Parameters.worldMatrix.value     = Tools.MakeMatrix(new Vector3(0.0f, 0.0f, 0.0f), new Vector3(1.0f, 1.0f, 1.0f), ( float )(0.0f * Math.PI / 180.0f));
            Parameters.interfaceMatrix.value = Tools.MakeMatrix(new Vector3(0.0f, 0.0f, 0.0f), new Vector3(1.0f, 1.0f, 1.0f), 0.0f);

            Parameters.projectionMatrix.value = Tools.MakeMatrixPerspective(
                new Vector3(0.0f, -1.0f, 0.0f),
                new Vector3(0.0f, 0.0f, 0.0f),
                0.01f,
                1000.0f,
                ( float )Math.PI * 10.1f,
                1.0f
                );

            //Console.WriteLine( GL.GetInteger( GetPName.MaxVertexUniformBlocks ) );

            //0

            /* GL.BindBuffer( BufferTarget.ArrayBuffer, vbo[ 0 ] );
             * GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( vertPos.Length * sizeof( float ) ), vertPos, BufferUsageHint.StaticDraw );
             * GL.VertexAttribPointer( 0, 2, VertexAttribPointerType.Float, false, 0, 0 );
             * GL.EnableVertexAttribArray( 0 ); */

            //1

            /* GL.BindBuffer( BufferTarget.ArrayBuffer, vbo[ 1 ] );
             * GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( vertColor.Length * sizeof( float ) ), vertColor, BufferUsageHint.StaticDraw );
             * GL.VertexAttribPointer( 1, 4, VertexAttribPointerType.Float, false, 0, 0 );
             * GL.EnableVertexAttribArray( 1 ); */

            //2

            /* GL.BindBuffer( BufferTarget.ArrayBuffer, vbo[ 2 ] );
             * GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( index2matrix.Length * sizeof( UInt32 ) ), index2matrix, BufferUsageHint.StaticDraw );
             * GL.VertexAttribPointer( 2, 1, VertexAttribPointerType.UnsignedInt, false, 0, 0 );
             * GL.EnableVertexAttribArray( 2 ); */

            //TBO
            //tbo = GL.GenBuffer();
            //tboTexture = GL.GenTexture();

            //GL.BindBuffer( BufferTarget.TextureBuffer, tbo );
            //GL.BufferData( BufferTarget.TextureBuffer, ( IntPtr ) ( sizeof( Matrix4 ) * matrixArray.Length ), matrixArray, BufferUsageHint.StaticDraw );
            //GL.BindBuffer( BufferTarget.TextureBuffer, 0 );

            /* fixed( void* pMatrixArray = matrixArray ) {
             * //Parameters.tboObjectsMatrices.SetData( ( IntPtr ) pMatrixArray );
             * } */

            //in Render():
            //GL.ActiveTexture( TextureUnit.Texture0 );
            //GL.BindTexture( TextureTarget.TextureBuffer, tboTexture );
            //GL.TexBuffer( TextureBufferTarget.TextureBuffer, SizedInternalFormat.R32f, tbo );
            //GL.Uniform1( GL.GetUniformLocation( ( ( ShaderProgram ) Resource.Get( "main-2.sp" ) ).descriptor, "objectsData" ), tboTexture );

            foreach (ShaderProgram shaderProgram in Resource.GetAllShaderProgram())
            {
                shaderProgram.AddUniform(new ShaderProgramUniformMatrix4Pointer("worldMatrix", Parameters.worldMatrix));
                shaderProgram.AddUniform(new ShaderProgramUniformMatrix4Pointer("projectionMatrix", Parameters.projectionMatrix));
                shaderProgram.AddUniform(new ShaderProgramUniformMatrix4Pointer("interfaceMatrix", Parameters.interfaceMatrix));
                shaderProgram.AddUniform(new ShaderProgramUniformFloatPointer("time", this.staticData.t));
                Parameters.tboObjectsMatrices.Bind(shaderProgram);
            }

            GL.Viewport(0, 0, this.Width, this.Height);
            //Resource.Get( "sprite.mesh" );

            //this.RenderTime = 1000.5;
        }