private IntPtr RectangleDataPtr() { TexturedQuadVertex vertex1 = new TexturedQuadVertex(); TexturedQuadVertex vertex2 = new TexturedQuadVertex(); TexturedQuadVertex vertex3 = new TexturedQuadVertex(); TexturedQuadVertex vertex4 = new TexturedQuadVertex(); vertex1.position = new Vec2(-0.5f, -0.5f); vertex2.position = new Vec2(-0.5f, 0.5f); vertex3.position = new Vec2(0.5f, -0.5f); vertex4.position = new Vec2(0.5f, 0.5f); TexturedQuadVertex[] texturedQuadVertexData = new TexturedQuadVertex[4] { vertex1, vertex2, vertex3, vertex4 }; int lenght = Marshal.SizeOf(vertex1); IntPtr pA = Marshal.AllocHGlobal(lenght * 4); for (int i = 0; i < 4; i++) { Marshal.StructureToPtr(texturedQuadVertexData[i], pA + i * lenght, true); } return(pA); }
private Geometry CreateQuadGeometry() { PropertyBuffer vertexData = CreatePropertyBuffer(); TexturedQuadVertex vertex1 = new TexturedQuadVertex(); TexturedQuadVertex vertex2 = new TexturedQuadVertex(); TexturedQuadVertex vertex3 = new TexturedQuadVertex(); TexturedQuadVertex vertex4 = new TexturedQuadVertex(); vertex1.position = new Vec2(-0.5f, -0.5f); vertex2.position = new Vec2(-0.5f, 0.5f); vertex3.position = new Vec2(0.5f, -0.5f); vertex4.position = new Vec2(0.5f, 0.5f); TexturedQuadVertex[] texturedQuadVertexData = new TexturedQuadVertex[4] { vertex1, vertex2, vertex3, vertex4 }; int lenght = Marshal.SizeOf(vertex1); IntPtr pA = Marshal.AllocHGlobal(lenght * 4); for (int i = 0; i < 4; i++) { Marshal.StructureToPtr(texturedQuadVertexData[i], pA + i * lenght, true); } vertexData.SetData(pA, 4); Geometry geometry = new Geometry(); geometry.AddVertexBuffer(vertexData); geometry.SetType(Geometry.Type.TRIANGLE_STRIP); return(geometry); }
private global::System.IntPtr RectangleDataPtr() { TexturedQuadVertex v1 = new TexturedQuadVertex(); TexturedQuadVertex v2 = new TexturedQuadVertex(); TexturedQuadVertex v3 = new TexturedQuadVertex(); TexturedQuadVertex v4 = new TexturedQuadVertex(); v1.position = new Vec2(-0.5f, -0.5f); v2.position = new Vec2(-0.5f, 0.5f); v3.position = new Vec2(0.5f, -0.5f); v4.position = new Vec2(0.5f, 0.5f); TexturedQuadVertex[] texturedQuadVertexData = new TexturedQuadVertex[4] { v1, v2, v3, v4 }; int length = Marshal.SizeOf(v1); global::System.IntPtr pA = Marshal.AllocHGlobal(length * 4); for (int i = 0; i < 4; i++) { Marshal.StructureToPtr(texturedQuadVertexData[i], pA + i * length, true); } return(pA); }
// Copy from dali-toolkit/internal/visuals/primitive/primitive-visual.cpp // NOTE. I add one more slices for texture coordinate private global::System.IntPtr SphereVertexDataPtr() { TexturedQuadVertex[] vertices = new TexturedQuadVertex[SPHERE_VERTEX_NUMBER]; const int slices = SPHERE_SLICES; const int stacks = SPHERE_STACKS; // Build start. { int vertexIndex = 0; //Track progress through vertices. float x; float y; float z; //Top stack. vertices[vertexIndex].position = new Vec3(0.0f, 0.5f, 0.0f); vertices[vertexIndex].normal = new Vec3(0.0f, 1.0f, 0.0f); vertices[vertexIndex].texcoord = new Vec2(0.5f, 1.0f); vertexIndex++; //Middle stacks. for (int i = 1; i < stacks; i++) { //Note. This vertex method is not common. //We set one more vertexes for correct texture coordinate. at j == slices //j==0 and j==slices have equal position, normal, but there texcoord.x is different for (int j = 0; j <= slices; j++, vertexIndex++) { float cos_j = (float)Math.Cos(2.0f * (float)Math.PI * j / (float)slices); float sin_j = (float)Math.Sin(2.0f * (float)Math.PI * j / (float)slices); float cos_i = (float)Math.Cos((float)Math.PI * i / (float)stacks); float sin_i = (float)Math.Sin((float)Math.PI * i / (float)stacks); x = cos_j * sin_i; y = cos_i; z = sin_j * sin_i; vertices[vertexIndex].position = new Vec3(x / 2.0f, y / 2.0f, z / 2.0f); vertices[vertexIndex].normal = new Vec3(x, y, z); vertices[vertexIndex].texcoord = new Vec2((float)j / (float)slices, 1.0f - (float)i / (float)stacks); } } //Bottom stack. vertices[vertexIndex].position = new Vec3(0.0f, -0.5f, 0.0f); vertices[vertexIndex].normal = new Vec3(0.0f, -1.0f, 0.0f); vertices[vertexIndex].texcoord = new Vec2(0.5f, 0.0f); } // Build done. int length = Marshal.SizeOf(vertices[0]); global::System.IntPtr pA = Marshal.AllocHGlobal(length * SPHERE_VERTEX_NUMBER); for (int i = 0; i < SPHERE_VERTEX_NUMBER; i++) { Marshal.StructureToPtr(vertices[i], pA + i * length, true); } return(pA); }
private Renderer CreateRenderer() { TexturedQuadVertex vertex1 = new TexturedQuadVertex(); TexturedQuadVertex vertex2 = new TexturedQuadVertex(); TexturedQuadVertex vertex3 = new TexturedQuadVertex(); TexturedQuadVertex vertex4 = new TexturedQuadVertex(); vertex1.position = new Vec2(-0.5f, -0.5f); vertex2.position = new Vec2(0.5f, -0.5f); vertex3.position = new Vec2(-0.5f, 0.5f); vertex4.position = new Vec2(0.5f, 0.5f); vertex1.texCoord = new Vec2(0.0f, 0.0f); vertex2.texCoord = new Vec2(1.0f, 0.0f); vertex3.texCoord = new Vec2(0.0f, 1.0f); vertex4.texCoord = new Vec2(1.0f, 1.0f); TexturedQuadVertex[] texturedQuadVertexData = new TexturedQuadVertex[4] { vertex1, vertex2, vertex3, vertex4 }; PropertyMap property = new PropertyMap(); property.Add("aPosition", new PropertyValue((int)PropertyType.Vector2)); property.Add("aTexCoord", new PropertyValue((int)PropertyType.Vector2)); PropertyBuffer vertexBuffer = new PropertyBuffer(property); const int vertexCount = 4; unsafe { float *pc = (float *)Marshal.UnsafeAddrOfPinnedArrayElement(texturedQuadVertexData, 0); IntPtr pA = new IntPtr(pc); vertexBuffer.SetData(pA, vertexCount); } Geometry geometry = new Geometry(); geometry.AddVertexBuffer(vertexBuffer); geometry.SetType(Geometry.Type.TRIANGLE_STRIP); // Create the shader Shader shader = new Shader(VERSION_3_ES + VERTEX_SHADER, VERSION_3_ES + FRAGMENT_SHADER); // Create the renderer Renderer renderer = new Renderer(geometry, shader); return(renderer); }
private TexturedQuadVertex[] Quad() { TexturedQuadVertex v1 = new TexturedQuadVertex(); TexturedQuadVertex v2 = new TexturedQuadVertex(); TexturedQuadVertex v3 = new TexturedQuadVertex(); TexturedQuadVertex v4 = new TexturedQuadVertex(); v1.position = new Vec2(-0.5f, -0.5f); v2.position = new Vec2(-0.5f, 0.5f); v3.position = new Vec2(0.5f, -0.5f); v4.position = new Vec2(0.5f, 0.5f); return(new TexturedQuadVertex[4] { v1, v2, v3, v4 }); }