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); }
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; }
public abstract void OnRender(SSBBE.RenderSettings renderSettings, GameObjects.Cameras.Camera camera);