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(); } }
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; } } }
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; }