예제 #1
0
        public override void OnRender(SSBBE.RenderSettings renderSettings, GameObjects.Cameras.Camera camera)
        {
            if (!m_visible)
            {
                return;
            }
            m_texture.Use();
            m_shader.Use();
            i_updateVertices(m_position, m_angleInRad, renderSettings, camera);

            GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
            GL.Enable(EnableCap.Blend);

            GL.BindVertexArray(m_vertexArrayObjectHandle);
            GL.BindBuffer(BufferTarget.ArrayBuffer, m_vertexBufferObjectHandle);
            GL.BufferData(BufferTarget.ArrayBuffer, m_vertices.Length * sizeof(float), m_vertices, BufferUsageHint.DynamicDraw);
            GL.DrawElements(BeginMode.Triangles, m_indices.Length, DrawElementsType.UnsignedInt, 0);

            GL.Disable(EnableCap.Blend);
        }
예제 #2
0
        void i_updateVertices(Vector2 position, float angleInRad, SSBBE.RenderSettings renderSettings, GameObjects.Cameras.Camera camera)
        {
            Vector2 cameraPos = new Vector2();

            if (camera != null)
            {
                cameraPos = camera.GetComponents().GetComponent <GameObjects.Components.ComponentTransform>().GetPosition();
            }

            var halfDim  = m_dimensions * 0.5f;
            var cosAngle = (float)Math.Cos(angleInRad);
            var sinAngle = (float)Math.Sin(angleInRad);
            var locX     = new Vector2(cosAngle, sinAngle);
            var locY     = new Vector2(-sinAngle, cosAngle);
            var topRight = locX * (halfDim.X - m_offset.X) + locY * (halfDim.Y - m_offset.Y);
            var botRight = locX * (halfDim.X - m_offset.X) + locY * (-halfDim.Y - m_offset.Y);
            var topLeft  = locX * (-halfDim.X - m_offset.X) + locY * (halfDim.Y - m_offset.Y);
            var botLeft  = locX * (-halfDim.X - m_offset.X) + locY * (-halfDim.Y - m_offset.Y);
            var zoomFac  = 1.0f;

            if (camera != null)
            {
                zoomFac = camera.GetZoomFactor();
            }
            m_vertices[i_getVertexStartId(0) + 0] = (position.X + topRight.X * m_scale.X - cameraPos.X) * (renderSettings.InvWidth * zoomFac);
            m_vertices[i_getVertexStartId(0) + 1] = (position.Y + topRight.Y * m_scale.Y - cameraPos.Y) * (renderSettings.InvHeight * zoomFac);
            m_vertices[i_getVertexStartId(0) + 3] = m_uvOffset.X + m_uvScale.X;
            m_vertices[i_getVertexStartId(0) + 4] = m_uvOffset.Y + m_uvScale.Y;

            m_vertices[i_getVertexStartId(1) + 0] = (position.X + botRight.X * m_scale.X - cameraPos.X) * (renderSettings.InvWidth * zoomFac);
            m_vertices[i_getVertexStartId(1) + 1] = (position.Y + botRight.Y * m_scale.Y - cameraPos.Y) * (renderSettings.InvHeight * zoomFac);
            m_vertices[i_getVertexStartId(1) + 3] = m_uvOffset.X + m_uvScale.X;
            m_vertices[i_getVertexStartId(1) + 4] = m_uvOffset.Y;

            m_vertices[i_getVertexStartId(2) + 0] = (position.X + botLeft.X * m_scale.X - cameraPos.X) * (renderSettings.InvWidth * zoomFac);
            m_vertices[i_getVertexStartId(2) + 1] = (position.Y + botLeft.Y * m_scale.Y - cameraPos.Y) * (renderSettings.InvHeight * zoomFac);
            m_vertices[i_getVertexStartId(2) + 3] = m_uvOffset.X;
            m_vertices[i_getVertexStartId(2) + 4] = m_uvOffset.Y;

            m_vertices[i_getVertexStartId(3) + 0] = (position.X + topLeft.X * m_scale.X - cameraPos.X) * (renderSettings.InvWidth * zoomFac);
            m_vertices[i_getVertexStartId(3) + 1] = (position.Y + topLeft.Y * m_scale.Y - cameraPos.Y) * (renderSettings.InvHeight * zoomFac);
            m_vertices[i_getVertexStartId(3) + 3] = m_uvOffset.X;
            m_vertices[i_getVertexStartId(3) + 4] = m_uvOffset.Y + m_uvScale.Y;
        }
예제 #3
0
 public abstract void OnRender(SSBBE.RenderSettings renderSettings, GameObjects.Cameras.Camera camera);