Partial refactor of UI rendering to improve performance and fix transparency issues
Disabled rendering via CDevicedev
parent
0908e10ff6
commit
1a190b7f6f
|
@ -465,12 +465,6 @@ public:
|
|||
//! Enables/disables the given texture stage
|
||||
virtual void SetTextureEnabled(int index, bool enabled) = 0;
|
||||
|
||||
//! Sets the params for texture stage with given index
|
||||
virtual void SetTextureStageParams(int index, const TextureStageParams ¶ms) = 0;
|
||||
|
||||
//! Sets only the texture wrap modes (for faster than thru stage params)
|
||||
virtual void SetTextureStageWrap(int index, TexWrapMode wrapS, TexWrapMode wrapT) = 0;
|
||||
|
||||
//! Renders primitive composed of vertices with single texture
|
||||
virtual void DrawPrimitive(PrimitiveType type, const Vertex *vertices , int vertexCount,
|
||||
Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) = 0;
|
||||
|
@ -508,12 +502,6 @@ public:
|
|||
//! Sets the clear color
|
||||
virtual void SetClearColor(const Color &color) = 0;
|
||||
|
||||
//! Sets the current cull mode
|
||||
virtual void SetCullMode(CullMode mode) = 0;
|
||||
|
||||
//! Sets the current fill mode
|
||||
virtual void SetFillMode(FillMode mode) = 0;
|
||||
|
||||
//! Copies content of framebuffer to texture
|
||||
virtual void CopyFramebufferToTexture(Texture& texture, int xOffset, int yOffset, int x, int y, int width, int height) = 0;
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ class CVertexBuffer;
|
|||
enum class PrimitiveType : unsigned char;
|
||||
struct Texture;
|
||||
|
||||
enum class TransparencyMode
|
||||
enum class TransparencyMode : unsigned char
|
||||
{
|
||||
NONE,
|
||||
ALPHA,
|
||||
|
@ -59,9 +59,6 @@ class CRenderer
|
|||
{
|
||||
public:
|
||||
virtual ~CRenderer() { }
|
||||
|
||||
//! Flush buffered content
|
||||
virtual void Flush() {}
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -79,9 +76,14 @@ public:
|
|||
virtual void SetTexture(const Texture& texture) = 0;
|
||||
//! Sets color
|
||||
virtual void SetColor(const glm::vec4& color) = 0;
|
||||
//! Sets transparency mode
|
||||
virtual void SetTransparency(TransparencyMode mode) = 0;
|
||||
|
||||
//! Draws primitive
|
||||
virtual void DrawPrimitive(PrimitiveType type, int count, const Vertex2D* vertices) = 0;
|
||||
|
||||
virtual Vertex2D* BeginPrimitive(PrimitiveType type, int count) = 0;
|
||||
virtual bool EndPrimitive() = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -135,7 +135,7 @@ CCamera::CCamera()
|
|||
m_overType = CAM_OVER_EFFECT_NULL;
|
||||
m_overForce = 0.0f;
|
||||
m_overTime = 0.0f;
|
||||
m_overMode = 0;
|
||||
m_overMode = TransparencyMode::NONE;
|
||||
m_overFadeIn = 0.0f;
|
||||
m_overFadeOut = 0.0f;
|
||||
|
||||
|
@ -611,7 +611,7 @@ void CCamera::StartOver(CameraOverEffect effect, glm::vec3 pos, float force)
|
|||
if (m_overType == CAM_OVER_EFFECT_BLOOD)
|
||||
{
|
||||
m_overColor = Color(0.8f, 0.1f, 0.1f); // red
|
||||
m_overMode = ENG_RSTATE_TCOLOR_BLACK;
|
||||
m_overMode = TransparencyMode::BLACK;
|
||||
|
||||
m_overFadeIn = 0.4f;
|
||||
m_overFadeOut = 0.8f;
|
||||
|
@ -621,7 +621,7 @@ void CCamera::StartOver(CameraOverEffect effect, glm::vec3 pos, float force)
|
|||
if ( m_overType == CAM_OVER_EFFECT_FADEIN_WHITE )
|
||||
{
|
||||
m_overColor = Color(1.0f, 1.0f, 1.0f); // white
|
||||
m_overMode = ENG_RSTATE_TCOLOR_BLACK;
|
||||
m_overMode = TransparencyMode::BLACK;
|
||||
|
||||
m_overFadeIn = 0.0f;
|
||||
m_overFadeOut = 20.0f;
|
||||
|
@ -631,7 +631,7 @@ void CCamera::StartOver(CameraOverEffect effect, glm::vec3 pos, float force)
|
|||
if ( m_overType == CAM_OVER_EFFECT_FADEOUT_WHITE )
|
||||
{
|
||||
m_overColor = Color(1.0f, 1.0f, 1.0f); // white
|
||||
m_overMode = ENG_RSTATE_TCOLOR_BLACK;
|
||||
m_overMode = TransparencyMode::BLACK;
|
||||
|
||||
m_overFadeIn = 6.0f;
|
||||
m_overFadeOut = 100000.0f;
|
||||
|
@ -641,7 +641,7 @@ void CCamera::StartOver(CameraOverEffect effect, glm::vec3 pos, float force)
|
|||
if ( m_overType == CAM_OVER_EFFECT_FADEOUT_BLACK )
|
||||
{
|
||||
m_overColor = m_engine->GetFogColor(1); // fog color underwater
|
||||
m_overMode = ENG_RSTATE_TTEXTURE_WHITE;
|
||||
m_overMode = TransparencyMode::WHITE;
|
||||
|
||||
m_overFadeIn = 4.0f;
|
||||
m_overFadeOut = 100000.0f;
|
||||
|
@ -651,7 +651,7 @@ void CCamera::StartOver(CameraOverEffect effect, glm::vec3 pos, float force)
|
|||
if ( m_overType == CAM_OVER_EFFECT_LIGHTNING )
|
||||
{
|
||||
m_overColor = Color(0.9f, 1.0f, 1.0f); // white-cyan
|
||||
m_overMode = ENG_RSTATE_TCOLOR_BLACK;
|
||||
m_overMode = TransparencyMode::BLACK;
|
||||
|
||||
m_overFadeIn = 0.0f;
|
||||
m_overFadeOut = 1.0f;
|
||||
|
@ -692,7 +692,7 @@ void CCamera::OverFrame(const Event &event)
|
|||
intensity *= m_overForce;
|
||||
|
||||
Color color;
|
||||
if (m_overMode == ENG_RSTATE_TCOLOR_WHITE)
|
||||
if (m_overMode == TransparencyMode::WHITE)
|
||||
{
|
||||
color.r = 1.0f - (1.0f - m_overColor.r) * intensity;
|
||||
color.g = 1.0f - (1.0f - m_overColor.g) * intensity;
|
||||
|
@ -717,7 +717,7 @@ void CCamera::OverFrame(const Event &event)
|
|||
intensity *= m_overForce;
|
||||
|
||||
Color color;
|
||||
if (m_overMode == ENG_RSTATE_TCOLOR_WHITE)
|
||||
if (m_overMode == TransparencyMode::WHITE)
|
||||
{
|
||||
color.r = 1.0f-(1.0f-m_overColor.r) * intensity;
|
||||
color.g = 1.0f-(1.0f-m_overColor.g) * intensity;
|
||||
|
|
|
@ -389,7 +389,7 @@ protected:
|
|||
float m_overTime;
|
||||
Color m_overColorBase;
|
||||
Color m_overColor;
|
||||
int m_overMode;
|
||||
TransparencyMode m_overMode;
|
||||
float m_overFadeIn;
|
||||
float m_overFadeOut;
|
||||
|
||||
|
|
|
@ -83,17 +83,17 @@ struct EngineMouse
|
|||
//! Shadow texture part
|
||||
int iconShadow;
|
||||
//! Mode to render 1st image in
|
||||
EngineRenderState mode1;
|
||||
TransparencyMode mode1;
|
||||
//! Mode to render 2nd image in
|
||||
EngineRenderState mode2;
|
||||
TransparencyMode mode2;
|
||||
//! Hot point
|
||||
glm::ivec2 hotPoint;
|
||||
|
||||
EngineMouse(int icon1 = -1,
|
||||
int icon2 = -1,
|
||||
int iconShadow = -1,
|
||||
EngineRenderState mode1 = ENG_RSTATE_NORMAL,
|
||||
EngineRenderState mode2 = ENG_RSTATE_NORMAL,
|
||||
TransparencyMode mode1 = TransparencyMode::NONE,
|
||||
TransparencyMode mode2 = TransparencyMode::NONE,
|
||||
glm::ivec2 hotPoint = { 0, 0 })
|
||||
: icon1(icon1)
|
||||
, icon2(icon2)
|
||||
|
@ -106,22 +106,22 @@ struct EngineMouse
|
|||
|
||||
constexpr glm::ivec2 MOUSE_SIZE(32, 32);
|
||||
const std::map<EngineMouseType, EngineMouse> MOUSE_TYPES = {
|
||||
{{ENG_MOUSE_NORM}, {EngineMouse( 0, 1, 32, ENG_RSTATE_TTEXTURE_WHITE, ENG_RSTATE_TTEXTURE_BLACK, glm::ivec2( 1, 1))}},
|
||||
{{ENG_MOUSE_WAIT}, {EngineMouse( 2, 3, 33, ENG_RSTATE_TTEXTURE_WHITE, ENG_RSTATE_TTEXTURE_BLACK, glm::ivec2( 8, 12))}},
|
||||
{{ENG_MOUSE_HAND}, {EngineMouse( 4, 5, 34, ENG_RSTATE_TTEXTURE_WHITE, ENG_RSTATE_TTEXTURE_BLACK, glm::ivec2( 7, 2))}},
|
||||
{{ENG_MOUSE_NO}, {EngineMouse( 6, 7, 35, ENG_RSTATE_TTEXTURE_WHITE, ENG_RSTATE_TTEXTURE_BLACK, glm::ivec2(10, 10))}},
|
||||
{{ENG_MOUSE_EDIT}, {EngineMouse( 8, 9, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 6, 10))}},
|
||||
{{ENG_MOUSE_CROSS}, {EngineMouse(10, 11, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2(10, 10))}},
|
||||
{{ENG_MOUSE_MOVEV}, {EngineMouse(12, 13, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 5, 11))}},
|
||||
{{ENG_MOUSE_MOVEH}, {EngineMouse(14, 15, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2(11, 5))}},
|
||||
{{ENG_MOUSE_MOVED}, {EngineMouse(16, 17, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 9, 9))}},
|
||||
{{ENG_MOUSE_MOVEI}, {EngineMouse(18, 19, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 9, 9))}},
|
||||
{{ENG_MOUSE_MOVE}, {EngineMouse(20, 21, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2(11, 11))}},
|
||||
{{ENG_MOUSE_TARGET}, {EngineMouse(22, 23, -1, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2(15, 15))}},
|
||||
{{ENG_MOUSE_SCROLLL}, {EngineMouse(24, 25, 43, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 2, 9))}},
|
||||
{{ENG_MOUSE_SCROLLR}, {EngineMouse(26, 27, 44, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2(17, 9))}},
|
||||
{{ENG_MOUSE_SCROLLU}, {EngineMouse(28, 29, 45, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 9, 2))}},
|
||||
{{ENG_MOUSE_SCROLLD}, {EngineMouse(30, 31, 46, ENG_RSTATE_TTEXTURE_BLACK, ENG_RSTATE_TTEXTURE_WHITE, glm::ivec2( 9, 17))}},
|
||||
{{ENG_MOUSE_NORM}, {EngineMouse( 0, 1, 32, TransparencyMode::WHITE, TransparencyMode::BLACK, glm::ivec2( 1, 1))}},
|
||||
{{ENG_MOUSE_WAIT}, {EngineMouse( 2, 3, 33, TransparencyMode::WHITE, TransparencyMode::BLACK, glm::ivec2( 8, 12))}},
|
||||
{{ENG_MOUSE_HAND}, {EngineMouse( 4, 5, 34, TransparencyMode::WHITE, TransparencyMode::BLACK, glm::ivec2( 7, 2))}},
|
||||
{{ENG_MOUSE_NO}, {EngineMouse( 6, 7, 35, TransparencyMode::WHITE, TransparencyMode::BLACK, glm::ivec2(10, 10))}},
|
||||
{{ENG_MOUSE_EDIT}, {EngineMouse( 8, 9, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 6, 10))}},
|
||||
{{ENG_MOUSE_CROSS}, {EngineMouse(10, 11, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2(10, 10))}},
|
||||
{{ENG_MOUSE_MOVEV}, {EngineMouse(12, 13, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 5, 11))}},
|
||||
{{ENG_MOUSE_MOVEH}, {EngineMouse(14, 15, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2(11, 5))}},
|
||||
{{ENG_MOUSE_MOVED}, {EngineMouse(16, 17, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 9, 9))}},
|
||||
{{ENG_MOUSE_MOVEI}, {EngineMouse(18, 19, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 9, 9))}},
|
||||
{{ENG_MOUSE_MOVE}, {EngineMouse(20, 21, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2(11, 11))}},
|
||||
{{ENG_MOUSE_TARGET}, {EngineMouse(22, 23, -1, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2(15, 15))}},
|
||||
{{ENG_MOUSE_SCROLLL}, {EngineMouse(24, 25, 43, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 2, 9))}},
|
||||
{{ENG_MOUSE_SCROLLR}, {EngineMouse(26, 27, 44, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2(17, 9))}},
|
||||
{{ENG_MOUSE_SCROLLU}, {EngineMouse(28, 29, 45, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 9, 2))}},
|
||||
{{ENG_MOUSE_SCROLLD}, {EngineMouse(30, 31, 46, TransparencyMode::BLACK, TransparencyMode::WHITE, glm::ivec2( 9, 17))}},
|
||||
};
|
||||
|
||||
CEngine::CEngine(CApplication *app, CSystemUtils* systemUtils)
|
||||
|
@ -181,7 +181,7 @@ CEngine::CEngine(CApplication *app, CSystemUtils* systemUtils)
|
|||
m_backgroundScale = false;
|
||||
m_overFront = true;
|
||||
m_overColor = Color();
|
||||
m_overMode = ENG_RSTATE_TCOLOR_BLACK;
|
||||
m_overMode = TransparencyMode::BLACK;
|
||||
m_highlight = false;
|
||||
std::fill_n(m_highlightRank, 100, -1);
|
||||
m_highlightTime = 0.0f;
|
||||
|
@ -346,7 +346,6 @@ bool CEngine::Create()
|
|||
}
|
||||
|
||||
m_device->SetClearColor(Color(0.0f, 0.0f, 0.0f, 0.0f));
|
||||
m_device->SetFillMode(FillMode::POLY);
|
||||
|
||||
SetFocus(m_focus);
|
||||
|
||||
|
@ -1918,238 +1917,6 @@ bool CEngine::TransformPoint(glm::vec3& p2D, int objRank, glm::vec3 p3D)
|
|||
|
||||
|
||||
|
||||
void CEngine::SetState(int state, const Color& color)
|
||||
{
|
||||
if (state == m_lastState && color == m_lastColor)
|
||||
return;
|
||||
|
||||
m_device->GetUIRenderer()->Flush();
|
||||
m_device->GetUIRenderer()->SetColor({ color.r, color.g, color.b, color.a });
|
||||
|
||||
m_lastState = state;
|
||||
m_lastColor = color;
|
||||
|
||||
if (state & ENG_RSTATE_TTEXTURE_BLACK) // transparent black texture?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_ONE, BLEND_INV_SRC_COLOR);
|
||||
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_MODULATE;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.colorArg2 = TEX_MIX_ARG_FACTOR;
|
||||
params.alphaOperation = TEX_MIX_OPER_DEFAULT;
|
||||
params.factor = color;
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, params);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TTEXTURE_WHITE) // transparent white texture?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_DST_COLOR, BLEND_ZERO);
|
||||
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_ADD;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.colorArg2 = TEX_MIX_ARG_FACTOR;
|
||||
params.alphaOperation = TEX_MIX_OPER_DEFAULT;
|
||||
params.factor = color.Inverse();
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, params);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TCOLOR_BLACK) // transparent black color?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_ONE, BLEND_INV_SRC_COLOR);
|
||||
|
||||
m_device->SetTextureEnabled(0, false);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TCOLOR_WHITE) // transparent white color?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_DST_COLOR, BLEND_ZERO);
|
||||
|
||||
m_device->SetTextureEnabled(0, false);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TDIFFUSE) // diffuse color as transparent?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_SRC_ALPHA, BLEND_DST_ALPHA);
|
||||
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_REPLACE;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.alphaOperation = TEX_MIX_OPER_DEFAULT;
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, params);
|
||||
}
|
||||
else if (state & ENG_RSTATE_OPAQUE_TEXTURE) // opaque texture ?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, false);
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, TextureStageParams()); // default operation
|
||||
}
|
||||
else if (state & ENG_RSTATE_OPAQUE_COLOR) // opaque color ?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, false);
|
||||
|
||||
m_device->SetTextureEnabled(0, false);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TEXT) // font rendering?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_SRC_ALPHA, BLEND_INV_SRC_ALPHA);
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, TextureStageParams()); // default operation
|
||||
}
|
||||
else if (state & ENG_RSTATE_ALPHA) // image with alpha channel?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_SRC_ALPHA, BLEND_INV_SRC_ALPHA);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, true);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, true);
|
||||
|
||||
m_device->SetAlphaTestFunc(COMP_FUNC_GREATER, 0.5f);
|
||||
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_MODULATE;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.colorArg2 = TEX_MIX_ARG_SRC_COLOR;
|
||||
params.alphaOperation = TEX_MIX_OPER_REPLACE;
|
||||
params.alphaArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.factor = color;
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, params);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TTEXTURE_ALPHA) // texture with alpha channel?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, true);
|
||||
m_device->SetAlphaTestFunc(COMP_FUNC_GREATER, 0.0f);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_DST_COLOR, BLEND_INV_SRC_ALPHA);
|
||||
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_MODULATE;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.colorArg2 = TEX_MIX_ARG_SRC_COLOR;
|
||||
params.alphaOperation = TEX_MIX_OPER_MODULATE;
|
||||
params.alphaArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.alphaArg2 = TEX_MIX_ARG_FACTOR;
|
||||
params.factor = color;
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, params);
|
||||
}
|
||||
else if (state & ENG_RSTATE_TCOLOR_ALPHA)
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, false);
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, true);
|
||||
m_device->SetBlendFunc(BLEND_DST_COLOR, BLEND_INV_SRC_ALPHA);
|
||||
|
||||
m_device->SetTextureEnabled(0, false);
|
||||
}
|
||||
else // normal ?
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, false);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, true);
|
||||
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_DEFAULT; // default modulate
|
||||
params.alphaOperation = TEX_MIX_OPER_DEFAULT;
|
||||
|
||||
m_device->SetTextureEnabled(0, true);
|
||||
m_device->SetTextureStageParams(0, params);
|
||||
}
|
||||
|
||||
bool second = m_dirty;
|
||||
|
||||
// TODO: I'm pretty sure this is reversed and should be m_dirty instead of !m_dirty ~krzys_h
|
||||
if ( !m_dirty && (state & ENG_RSTATE_SECOND) == 0 ) second = false;
|
||||
|
||||
if ((state & ENG_RSTATE_DUAL_BLACK) && second)
|
||||
{
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_MODULATE;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.colorArg2 = TEX_MIX_ARG_COMPUTED_COLOR;
|
||||
params.alphaOperation = TEX_MIX_OPER_DEFAULT;
|
||||
m_device->SetTextureEnabled(1, true);
|
||||
m_device->SetTextureStageParams(1, params);
|
||||
}
|
||||
else if ((state & ENG_RSTATE_DUAL_WHITE) && second)
|
||||
{
|
||||
TextureStageParams params;
|
||||
params.colorOperation = TEX_MIX_OPER_ADD;
|
||||
params.colorArg1 = TEX_MIX_ARG_TEXTURE;
|
||||
params.colorArg2 = TEX_MIX_ARG_COMPUTED_COLOR;
|
||||
params.alphaOperation = TEX_MIX_OPER_DEFAULT;
|
||||
m_device->SetTextureEnabled(1, true);
|
||||
m_device->SetTextureStageParams(1, params);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_device->SetTextureEnabled(1, false);
|
||||
}
|
||||
|
||||
if (state & ENG_RSTATE_WRAP)
|
||||
{
|
||||
m_device->SetTextureStageWrap(0, TEX_WRAP_REPEAT, TEX_WRAP_REPEAT);
|
||||
m_device->SetTextureStageWrap(1, TEX_WRAP_REPEAT, TEX_WRAP_REPEAT);
|
||||
}
|
||||
else if (state & ENG_RSTATE_CLAMP)
|
||||
{
|
||||
m_device->SetTextureStageWrap(0, TEX_WRAP_CLAMP, TEX_WRAP_CLAMP);
|
||||
m_device->SetTextureStageWrap(1, TEX_WRAP_CLAMP, TEX_WRAP_CLAMP);
|
||||
}
|
||||
|
||||
if (state & ENG_RSTATE_2FACE)
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_CULLING, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_device->SetRenderState(RENDER_STATE_CULLING, true);
|
||||
m_device->SetCullMode(CULL_CCW);
|
||||
}
|
||||
}
|
||||
|
||||
void CEngine::SetMaterial(const Material& mat)
|
||||
{
|
||||
m_lastMaterial = mat;
|
||||
|
@ -2807,7 +2574,7 @@ void CEngine::SetOverFront(bool front)
|
|||
m_overFront = front;
|
||||
}
|
||||
|
||||
void CEngine::SetOverColor(const Color& color, int mode)
|
||||
void CEngine::SetOverColor(const Color& color, TransparencyMode mode)
|
||||
{
|
||||
m_overColor = color;
|
||||
m_overMode = mode;
|
||||
|
@ -3233,8 +3000,6 @@ void CEngine::Draw3DScene()
|
|||
|
||||
//m_lightMan->UpdateDeviceLights(ENG_OBJTYPE_TERRAIN);
|
||||
|
||||
SetState(0);
|
||||
|
||||
Gfx::ShadowParam shadowParams[4];
|
||||
for (int i = 0; i < m_shadowRegions; i++)
|
||||
{
|
||||
|
@ -3522,7 +3287,7 @@ void CEngine::Draw3DScene()
|
|||
glm::mat4 worldMatrix = glm::mat4(1.0f);
|
||||
m_device->SetTransform(TRANSFORM_WORLD, worldMatrix);
|
||||
|
||||
SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
//SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
|
||||
for (const auto& line : m_displayGoto)
|
||||
{
|
||||
|
@ -3661,14 +3426,7 @@ void CEngine::Capture3DScene()
|
|||
|
||||
void CEngine::DrawCaptured3DScene()
|
||||
{
|
||||
glm::mat4 identity = glm::mat4(1.0f);
|
||||
|
||||
m_device->SetTransform(TRANSFORM_PROJECTION, identity);
|
||||
m_device->SetTransform(TRANSFORM_VIEW, identity);
|
||||
m_device->SetTransform(TRANSFORM_WORLD, identity);
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_BLENDING, false);
|
||||
m_device->SetRenderState(RENDER_STATE_CULLING, false);
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_TEST, false);
|
||||
|
||||
Vertex2D vertices[4];
|
||||
|
||||
|
@ -3677,11 +3435,10 @@ void CEngine::DrawCaptured3DScene()
|
|||
vertices[2] = { { 0.0f, 1.0f }, { 0.0f, 1.0f } };
|
||||
vertices[3] = { { 1.0f, 1.0f }, { 1.0f, 1.0f } };
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_DEPTH_TEST, false);
|
||||
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
|
||||
renderer->SetTexture(m_capturedWorldTexture);
|
||||
renderer->SetTransparency(TransparencyMode::NONE);
|
||||
renderer->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, 4, vertices);
|
||||
}
|
||||
|
||||
|
@ -3805,7 +3562,7 @@ void CEngine::RenderPendingDebugDraws()
|
|||
|
||||
m_device->SetTransform(TRANSFORM_WORLD, glm::mat4(1.0f));
|
||||
|
||||
SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
//SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
|
||||
m_device->DrawPrimitives(PrimitiveType::LINE_STRIP,
|
||||
m_pendingDebugDraws.vertices.data(),
|
||||
|
@ -3975,10 +3732,6 @@ void CEngine::RenderShadowMap()
|
|||
|
||||
renderer->End();
|
||||
|
||||
m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, false);
|
||||
m_device->SetRenderState(RENDER_STATE_CULLING, false);
|
||||
m_device->SetCullMode(CULL_CW);
|
||||
|
||||
// restore default state
|
||||
m_device->SetViewport(0, 0, m_size.x, m_size.y);
|
||||
|
||||
|
@ -4060,7 +3813,6 @@ void CEngine::DrawInterface()
|
|||
// Force new state to disable lighting
|
||||
m_interfaceMode = true;
|
||||
m_lastState = -1;
|
||||
SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
|
||||
// Draw the entire interface
|
||||
Ui::CInterface* interface = CRobotMain::GetInstancePointer()->GetInterface();
|
||||
|
@ -4071,7 +3823,6 @@ void CEngine::DrawInterface()
|
|||
|
||||
m_interfaceMode = false;
|
||||
m_lastState = -1;
|
||||
SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
|
||||
if (!m_screenshotMode && m_renderInterface)
|
||||
{
|
||||
|
@ -4688,7 +4439,7 @@ void CEngine::DrawShadowSpots()
|
|||
if (lastIntensity != intensity) // intensity changed?
|
||||
{
|
||||
lastIntensity = intensity;
|
||||
SetState(ENG_RSTATE_TTEXTURE_WHITE, Color(intensity, intensity, intensity, intensity));
|
||||
//SetState(ENG_RSTATE_TTEXTURE_WHITE, Color(intensity, intensity, intensity, intensity));
|
||||
}
|
||||
|
||||
m_device->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, vertex, 4);
|
||||
|
@ -4733,8 +4484,6 @@ void CEngine::DrawBackgroundGradient(const Color& up, const Color& down)
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
|
||||
auto renderer = m_device->GetObjectRenderer();
|
||||
renderer->Begin();
|
||||
renderer->SetProjectionMatrix(m_matProjInterface);
|
||||
|
@ -4826,8 +4575,6 @@ void CEngine::DrawBackgroundImage()
|
|||
v2 -= margin_v;
|
||||
}
|
||||
|
||||
SetUITexture(m_backgroundTex);
|
||||
|
||||
Vertex2D vertices[4] =
|
||||
{
|
||||
{ { p1.x, p1.y }, { u1, v2 } },
|
||||
|
@ -4837,6 +4584,7 @@ void CEngine::DrawBackgroundImage()
|
|||
};
|
||||
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
renderer->SetTexture(m_backgroundTex);
|
||||
renderer->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, 4, vertices);
|
||||
AddStatisticTriangle(2);
|
||||
}
|
||||
|
@ -4887,7 +4635,7 @@ void CEngine::DrawForegroundImage()
|
|||
};
|
||||
|
||||
SetTexture(m_foregroundTex);
|
||||
SetState(ENG_RSTATE_CLAMP | ENG_RSTATE_TTEXTURE_BLACK);
|
||||
//SetState(ENG_RSTATE_TTEXTURE_BLACK);
|
||||
|
||||
m_device->Restore();
|
||||
|
||||
|
@ -4901,8 +4649,8 @@ void CEngine::DrawForegroundImage()
|
|||
|
||||
void CEngine::DrawOverColor()
|
||||
{
|
||||
if ((m_overColor == Color(0.0f, 0.0f, 0.0f, 0.0f) && m_overMode == ENG_RSTATE_TCOLOR_BLACK) ||
|
||||
(m_overColor == Color(1.0f, 1.0f, 1.0f, 1.0f) && m_overMode == ENG_RSTATE_TCOLOR_WHITE))
|
||||
if ((m_overColor == Color(0.0f, 0.0f, 0.0f, 0.0f) && m_overMode == TransparencyMode::BLACK) ||
|
||||
(m_overColor == Color(1.0f, 1.0f, 1.0f, 1.0f) && m_overMode == TransparencyMode::WHITE))
|
||||
return;
|
||||
|
||||
glm::vec2 p1(0.0f, 0.0f);
|
||||
|
@ -4917,33 +4665,19 @@ void CEngine::DrawOverColor()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
m_device->Restore();
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
renderer->SetTexture(Texture{});
|
||||
renderer->SetTransparency(m_overMode);
|
||||
|
||||
SetState(m_overMode);
|
||||
|
||||
auto renderer = m_device->GetObjectRenderer();
|
||||
renderer->Begin();
|
||||
|
||||
renderer->SetProjectionMatrix(m_matProjInterface);
|
||||
renderer->SetViewMatrix(m_matViewInterface);
|
||||
renderer->SetModelMatrix(m_matWorldInterface);
|
||||
renderer->SetLighting(false);
|
||||
|
||||
if (m_overMode == ENG_RSTATE_TCOLOR_BLACK)
|
||||
renderer->SetTransparency(TransparencyMode::BLACK);
|
||||
else if (m_overMode == ENG_RSTATE_TCOLOR_WHITE)
|
||||
renderer->SetTransparency(TransparencyMode::WHITE);
|
||||
|
||||
Vertex3D vertex[4] =
|
||||
Vertex2D vertex[4] =
|
||||
{
|
||||
{ glm::vec3(p1.x, p1.y, 0.0f), colors[1] },
|
||||
{ glm::vec3(p1.x, p2.y, 0.0f), colors[0] },
|
||||
{ glm::vec3(p2.x, p1.y, 0.0f), colors[1] },
|
||||
{ glm::vec3(p2.x, p2.y, 0.0f), colors[0] }
|
||||
{ { p1.x, p1.y }, {}, colors[1] },
|
||||
{ { p1.x, p2.y }, {}, colors[0] },
|
||||
{ { p2.x, p1.y }, {}, colors[1] },
|
||||
{ { p2.x, p2.y }, {}, colors[0] }
|
||||
};
|
||||
|
||||
renderer->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, 4, vertex);
|
||||
renderer->End();
|
||||
|
||||
AddStatisticTriangle(2);
|
||||
|
||||
|
@ -4999,7 +4733,7 @@ void CEngine::DrawHighlight()
|
|||
if (nbOut > 2)
|
||||
return;
|
||||
|
||||
SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
//SetState(ENG_RSTATE_OPAQUE_COLOR);
|
||||
|
||||
float d = 0.5f + sinf(m_highlightTime * 6.0f) * 0.5f;
|
||||
d *= (p2.x - p1.x) * 0.1f;
|
||||
|
@ -5049,10 +4783,6 @@ void CEngine::DrawMouse()
|
|||
|
||||
SetWindowCoordinates();
|
||||
|
||||
m_device->SetTexture(0, m_miceTexture);
|
||||
|
||||
SetUITexture(m_miceTexture);
|
||||
|
||||
glm::vec2 mousePos = CInput::GetInstancePointer()->GetMousePos();
|
||||
glm::ivec2 pos(mousePos.x * m_size.x, m_size.y - mousePos.y * m_size.y);
|
||||
pos.x -= MOUSE_TYPES.at(m_mouseType).hotPoint.x;
|
||||
|
@ -5060,19 +4790,17 @@ void CEngine::DrawMouse()
|
|||
|
||||
glm::ivec2 shadowPos = { pos.x + 4, pos.y - 3 };
|
||||
|
||||
SetState(ENG_RSTATE_TCOLOR_WHITE);
|
||||
DrawMouseSprite(shadowPos, MOUSE_SIZE, MOUSE_TYPES.at(m_mouseType).iconShadow);
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
renderer->SetTexture(m_miceTexture);
|
||||
|
||||
SetState(MOUSE_TYPES.at(m_mouseType).mode1);
|
||||
DrawMouseSprite(pos, MOUSE_SIZE, MOUSE_TYPES.at(m_mouseType).icon1);
|
||||
|
||||
SetState(MOUSE_TYPES.at(m_mouseType).mode2);
|
||||
DrawMouseSprite(pos, MOUSE_SIZE, MOUSE_TYPES.at(m_mouseType).icon2);
|
||||
DrawMouseSprite(shadowPos, MOUSE_SIZE, MOUSE_TYPES.at(m_mouseType).iconShadow, TransparencyMode::WHITE);
|
||||
DrawMouseSprite(pos, MOUSE_SIZE, MOUSE_TYPES.at(m_mouseType).icon1, MOUSE_TYPES.at(m_mouseType).mode1);
|
||||
DrawMouseSprite(pos, MOUSE_SIZE, MOUSE_TYPES.at(m_mouseType).icon2, MOUSE_TYPES.at(m_mouseType).mode2);
|
||||
|
||||
SetInterfaceCoordinates();
|
||||
}
|
||||
|
||||
void CEngine::DrawMouseSprite(const glm::ivec2& pos, const glm::ivec2& size, int icon)
|
||||
void CEngine::DrawMouseSprite(const glm::ivec2& pos, const glm::ivec2& size, int icon, TransparencyMode mode)
|
||||
{
|
||||
if (icon == -1)
|
||||
return;
|
||||
|
@ -5100,6 +4828,7 @@ void CEngine::DrawMouseSprite(const glm::ivec2& pos, const glm::ivec2& size, int
|
|||
};
|
||||
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
renderer->SetTransparency(mode);
|
||||
renderer->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, 4, vertex);
|
||||
AddStatisticTriangle(2);
|
||||
}
|
||||
|
@ -5115,8 +4844,9 @@ void CEngine::DrawStats()
|
|||
|
||||
glm::vec2 pos(0.05f * m_size.x/m_size.y, 0.05f + TOTAL_LINES * height);
|
||||
|
||||
SetState(ENG_RSTATE_TCOLOR_ALPHA);
|
||||
//SetState(ENG_RSTATE_TCOLOR_ALPHA);
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
renderer->SetTransparency(TransparencyMode::ALPHA);
|
||||
renderer->SetTexture(Texture{});
|
||||
|
||||
glm::u8vec4 black = { 0, 0, 0, 192 };
|
||||
|
@ -5133,7 +4863,7 @@ void CEngine::DrawStats()
|
|||
|
||||
renderer->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, 4, vertex);
|
||||
|
||||
SetState(ENG_RSTATE_TEXT);
|
||||
renderer->SetTransparency(TransparencyMode::ALPHA);
|
||||
|
||||
auto drawStatsLine = [&](const std::string& name, const std::string& value, const std::string& value2)
|
||||
{
|
||||
|
@ -5210,7 +4940,7 @@ void CEngine::DrawStats()
|
|||
|
||||
void CEngine::DrawTimer()
|
||||
{
|
||||
SetState(ENG_RSTATE_TEXT);
|
||||
//SetState(ENG_RSTATE_TEXT);
|
||||
|
||||
glm::vec2 pos(0.98f, 0.98f-m_text->GetAscent(FONT_COMMON, 15.0f));
|
||||
m_text->DrawText(m_timerText, FONT_COMMON, 15.0f, pos, 1.0f, TEXT_ALIGN_RIGHT, 0, Color(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
|
@ -5529,18 +5259,4 @@ void CEngine::SetWindowCoordinates()
|
|||
renderer->SetProjection(0.0f, m_size.x, m_size.y, 0.0f);
|
||||
}
|
||||
|
||||
void CEngine::SetUITexture(const std::string& name)
|
||||
{
|
||||
auto texture = LoadTexture(name);
|
||||
|
||||
SetUITexture(texture);
|
||||
}
|
||||
|
||||
void CEngine::SetUITexture(const Texture& texture)
|
||||
{
|
||||
auto renderer = m_device->GetUIRenderer();
|
||||
|
||||
renderer->SetTexture(texture);
|
||||
}
|
||||
|
||||
} // namespace Gfx
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "graphics/core/color.h"
|
||||
#include "graphics/core/material.h"
|
||||
#include "graphics/core/texture.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/core/vertex.h"
|
||||
|
||||
#include "math/sphere.h"
|
||||
|
@ -55,7 +56,6 @@ struct Event;
|
|||
namespace Gfx
|
||||
{
|
||||
|
||||
|
||||
class CDevice;
|
||||
class COldModelManager;
|
||||
class CLightManager;
|
||||
|
@ -90,10 +90,6 @@ enum EngineRenderState
|
|||
ENG_RSTATE_TTEXTURE_WHITE = (1<<1),
|
||||
//! The transparent diffuse color
|
||||
ENG_RSTATE_TDIFFUSE = (1<<2),
|
||||
//! Texture wrap
|
||||
ENG_RSTATE_WRAP = (1<<3),
|
||||
//! Texture borders with solid color
|
||||
ENG_RSTATE_CLAMP = (1<<4),
|
||||
//! Light texture (ambient max)
|
||||
ENG_RSTATE_LIGHT = (1<<5),
|
||||
//! Double black texturing
|
||||
|
@ -837,7 +833,7 @@ public:
|
|||
/* *************** Mode setting *************** */
|
||||
|
||||
//! Sets the current rendering state
|
||||
void SetState(int state, const Color& color = Color(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
//void SetState(int state, const Color& color = Color(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
|
||||
//! Sets the current material
|
||||
void SetMaterial(const Material& mat);
|
||||
|
@ -997,7 +993,7 @@ public:
|
|||
//! Specifies whether to draw the foreground
|
||||
void SetOverFront(bool front);
|
||||
//! Sets the foreground overlay color
|
||||
void SetOverColor(const Color& color = Color(), int mode = ENG_RSTATE_TCOLOR_BLACK);
|
||||
void SetOverColor(const Color& color = Color(), TransparencyMode mode = TransparencyMode::BLACK);
|
||||
|
||||
//@{
|
||||
//! Management of the particle density
|
||||
|
@ -1171,9 +1167,6 @@ public:
|
|||
void EnablePauseBlur();
|
||||
void DisablePauseBlur();
|
||||
|
||||
void SetUITexture(const std::string& name);
|
||||
void SetUITexture(const Texture& texture);
|
||||
|
||||
|
||||
//! Reloads all textures
|
||||
/** This additionally sends EVENT_RELOAD_TEXTURES to reload all textures not maintained by CEngine **/
|
||||
|
@ -1218,7 +1211,7 @@ protected:
|
|||
//! Draws the mouse cursor
|
||||
void DrawMouse();
|
||||
//! Draw part of mouse cursor sprite
|
||||
void DrawMouseSprite(const glm::ivec2& pos, const glm::ivec2& size, int icon);
|
||||
void DrawMouseSprite(const glm::ivec2& pos, const glm::ivec2& size, int icon, TransparencyMode mode);
|
||||
//! Draw statistic texts
|
||||
void DrawStats();
|
||||
//! Draw mission timer
|
||||
|
@ -1380,7 +1373,7 @@ protected:
|
|||
Color m_backgroundCloudDown;
|
||||
bool m_overFront;
|
||||
Color m_overColor;
|
||||
int m_overMode;
|
||||
TransparencyMode m_overMode;
|
||||
std::string m_foregroundName;
|
||||
Texture m_foregroundTex;
|
||||
bool m_drawWorld;
|
||||
|
|
|
@ -226,7 +226,7 @@ void CLightning::Draw()
|
|||
device->SetTransform(TRANSFORM_WORLD, mat);
|
||||
|
||||
m_engine->SetTexture("textures/effect00.png");
|
||||
m_engine->SetState(ENG_RSTATE_TTEXTURE_BLACK);
|
||||
//m_engine->SetState(ENG_RSTATE_TTEXTURE_BLACK);
|
||||
|
||||
glm::vec2 texInf;
|
||||
texInf.x = 64.5f/256.0f;
|
||||
|
|
|
@ -635,7 +635,7 @@ bool CTerrain::CreateMosaic(int ox, int oy, int step, int objRank)
|
|||
|
||||
buffer.type = EngineTriangleType::SURFACE;
|
||||
|
||||
buffer.state = ENG_RSTATE_WRAP;
|
||||
buffer.state = ENG_RSTATE_NORMAL;
|
||||
|
||||
buffer.state |= ENG_RSTATE_SECOND;
|
||||
if (step == 1)
|
||||
|
|
|
@ -115,13 +115,13 @@ public:
|
|||
|
||||
/// Add a quad to be rendered.
|
||||
/// This may trigger a call to Flush() if necessary.
|
||||
void Add(Vertex2D vertices[4], unsigned int texID, EngineRenderState renderState, Color color)
|
||||
void Add(Vertex2D vertices[4], unsigned int texID, TransparencyMode transparency, Color color)
|
||||
{
|
||||
if (texID != m_texID || renderState != m_renderState || color != m_color)
|
||||
if (texID != m_texID || transparency != m_transparency || color != m_color)
|
||||
{
|
||||
Flush();
|
||||
m_texID = texID;
|
||||
m_renderState = renderState;
|
||||
m_transparency = transparency;
|
||||
m_color = color;
|
||||
}
|
||||
m_quads.emplace_back(Quad{{vertices[0], vertices[1], vertices[2], vertices[3]}});
|
||||
|
@ -132,9 +132,9 @@ public:
|
|||
{
|
||||
if (m_quads.empty()) return;
|
||||
|
||||
m_engine.SetState(m_renderState);
|
||||
m_engine.GetDevice()->SetTexture(0, m_texID);
|
||||
m_engine.SetUITexture(Texture{ m_texID });
|
||||
auto renderer = m_engine.GetDevice()->GetUIRenderer();
|
||||
renderer->SetTexture(Texture{ m_texID });
|
||||
renderer->SetTransparency(m_transparency);
|
||||
|
||||
assert(m_firsts.size() == m_counts.size());
|
||||
if (m_firsts.size() < m_quads.size())
|
||||
|
@ -151,15 +151,11 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
auto renderer = m_engine.GetDevice()->GetUIRenderer();
|
||||
|
||||
for (const auto& quad : m_quads)
|
||||
{
|
||||
renderer->DrawPrimitive(PrimitiveType::TRIANGLE_STRIP, 4, quad.vertices);
|
||||
}
|
||||
|
||||
m_engine.GetDevice()->GetUIRenderer()->Flush();
|
||||
|
||||
//const Vertex* vertices = m_quads.front().vertices;
|
||||
//m_engine.GetDevice()->DrawPrimitives(PrimitiveType::TRIANGLE_STRIP, vertices, m_firsts.data(),
|
||||
// m_counts.data(), static_cast<int>(m_quads.size()), m_color);
|
||||
|
@ -176,7 +172,7 @@ private:
|
|||
|
||||
Color m_color;
|
||||
unsigned int m_texID{};
|
||||
EngineRenderState m_renderState{};
|
||||
TransparencyMode m_transparency = TransparencyMode::NONE;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1068,7 +1064,7 @@ void CText::DrawCharAndAdjustPos(UTF8Char ch, FontType font, float size, glm::iv
|
|||
{ { p2.x, p1.y }, { uv2.x, uv1.y }, col }
|
||||
};
|
||||
|
||||
m_quadBatch->Add(quad, texID, ENG_RSTATE_TTEXTURE_WHITE, color);
|
||||
m_quadBatch->Add(quad, texID, TransparencyMode::WHITE, color);
|
||||
|
||||
pos.x += width;
|
||||
}
|
||||
|
@ -1107,7 +1103,7 @@ void CText::DrawCharAndAdjustPos(UTF8Char ch, FontType font, float size, glm::iv
|
|||
{ { p2.x, p1.y }, { texCoord2.x, texCoord1.y }, col }
|
||||
};
|
||||
|
||||
m_quadBatch->Add(quad, tex.id, ENG_RSTATE_TEXT, color);
|
||||
m_quadBatch->Add(quad, tex.id, TransparencyMode::ALPHA, color);
|
||||
|
||||
pos.x += tex.charSize.x * width;
|
||||
}
|
||||
|
|
|
@ -373,8 +373,6 @@ void CGL33Device::BeginScene()
|
|||
|
||||
void CGL33Device::EndScene()
|
||||
{
|
||||
m_uiRenderer->Flush();
|
||||
|
||||
#ifdef DEV_BUILD
|
||||
CheckGLErrors();
|
||||
#endif
|
||||
|
@ -413,13 +411,7 @@ CShadowRenderer* CGL33Device::GetShadowRenderer()
|
|||
|
||||
void CGL33Device::Restore()
|
||||
{
|
||||
m_uiRenderer->Flush();
|
||||
glUseProgram(m_normalProgram);
|
||||
|
||||
|
||||
//UpdateTextureState(0);
|
||||
//UpdateTextureState(1);
|
||||
//UpdateTextureState(2);
|
||||
}
|
||||
|
||||
void CGL33Device::SetTransform(TransformType type, const glm::mat4 &matrix)
|
||||
|
@ -678,8 +670,6 @@ void CGL33Device::SetTexture(int index, const Texture &texture)
|
|||
|
||||
m_currentTextures[index] = texture; // remember the new value
|
||||
|
||||
// Params need to be updated for the new bound texture
|
||||
UpdateTextureParams(index);
|
||||
UpdateTextureState(index);
|
||||
}
|
||||
|
||||
|
@ -694,8 +684,6 @@ void CGL33Device::SetTexture(int index, unsigned int textureId)
|
|||
|
||||
m_currentTextures[index].id = textureId;
|
||||
|
||||
// Params need to be updated for the new bound texture
|
||||
UpdateTextureParams(index);
|
||||
UpdateTextureState(index);
|
||||
}
|
||||
|
||||
|
@ -711,82 +699,10 @@ void CGL33Device::SetTextureEnabled(int index, bool enabled)
|
|||
UpdateTextureState(index);
|
||||
}
|
||||
|
||||
/**
|
||||
Sets the texture parameters for the given texture stage.
|
||||
If the given texture was not set (bound) yet, nothing happens.
|
||||
The settings are remembered, even if texturing is disabled at the moment. */
|
||||
void CGL33Device::SetTextureStageParams(int index, const TextureStageParams ¶ms)
|
||||
{
|
||||
assert(index >= 0 && index < static_cast<int>( m_currentTextures.size() ));
|
||||
|
||||
// Remember the settings
|
||||
m_textureStageParams[index] = params;
|
||||
|
||||
UpdateTextureParams(index);
|
||||
}
|
||||
|
||||
void CGL33Device::UpdateTextureParams(int index)
|
||||
{
|
||||
assert(index >= 0 && index < static_cast<int>( m_currentTextures.size() ));
|
||||
|
||||
// Don't actually do anything if texture not set
|
||||
if (! m_currentTextures[index].Valid())
|
||||
return;
|
||||
|
||||
const TextureStageParams ¶ms = m_textureStageParams[index];
|
||||
|
||||
glActiveTexture(GL_TEXTURE0 + index);
|
||||
|
||||
if (params.wrapS == TEX_WRAP_CLAMP)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
else if (params.wrapS == TEX_WRAP_CLAMP_TO_BORDER)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
||||
else if (params.wrapS == TEX_WRAP_REPEAT)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
else assert(false);
|
||||
|
||||
if (params.wrapT == TEX_WRAP_CLAMP)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
else if (params.wrapT == TEX_WRAP_CLAMP_TO_BORDER)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||
else if (params.wrapT == TEX_WRAP_REPEAT)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
else assert(false);
|
||||
}
|
||||
|
||||
void CGL33Device::SetTextureStageWrap(int index, TexWrapMode wrapS, TexWrapMode wrapT)
|
||||
{
|
||||
assert(index >= 0 && index < static_cast<int>( m_currentTextures.size() ));
|
||||
|
||||
// Remember the settings
|
||||
m_textureStageParams[index].wrapS = wrapS;
|
||||
m_textureStageParams[index].wrapT = wrapT;
|
||||
|
||||
// Don't actually do anything if texture not set
|
||||
if (! m_currentTextures[index].Valid())
|
||||
return;
|
||||
|
||||
glActiveTexture(GL_TEXTURE0 + index);
|
||||
|
||||
if (wrapS == TEX_WRAP_CLAMP)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
else if (wrapS == TEX_WRAP_CLAMP_TO_BORDER)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
||||
else if (wrapS == TEX_WRAP_REPEAT)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
else assert(false);
|
||||
|
||||
if (wrapT == TEX_WRAP_CLAMP)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
else if (wrapT == TEX_WRAP_CLAMP_TO_BORDER)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||
else if (wrapT == TEX_WRAP_REPEAT)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
else assert(false);
|
||||
}
|
||||
|
||||
void CGL33Device::DrawPrimitive(PrimitiveType type, const Vertex *vertices, int vertexCount, Color color)
|
||||
{
|
||||
return;
|
||||
|
||||
unsigned int size = vertexCount * sizeof(Vertex);
|
||||
|
||||
DynamicBuffer& buffer = m_dynamicBuffer;
|
||||
|
@ -824,6 +740,8 @@ void CGL33Device::DrawPrimitive(PrimitiveType type, const Vertex *vertices, int
|
|||
|
||||
void CGL33Device::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, int vertexCount)
|
||||
{
|
||||
return;
|
||||
|
||||
unsigned int size = vertexCount * sizeof(VertexCol);
|
||||
|
||||
DynamicBuffer& buffer = m_dynamicBuffer;
|
||||
|
@ -860,6 +778,8 @@ void CGL33Device::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, i
|
|||
|
||||
void CGL33Device::DrawPrimitive(PrimitiveType type, const Vertex3D* vertices, int vertexCount)
|
||||
{
|
||||
return;
|
||||
|
||||
unsigned int size = vertexCount * sizeof(Vertex3D);
|
||||
|
||||
DynamicBuffer& buffer = m_dynamicBuffer;
|
||||
|
@ -900,6 +820,8 @@ void CGL33Device::DrawPrimitive(PrimitiveType type, const Vertex3D* vertices, in
|
|||
void CGL33Device::DrawPrimitives(PrimitiveType type, const Vertex *vertices,
|
||||
int first[], int count[], int drawCount, Color color)
|
||||
{
|
||||
return;
|
||||
|
||||
int vertexCount = 0;
|
||||
|
||||
for (int i = 0; i < drawCount; i++)
|
||||
|
@ -948,6 +870,8 @@ void CGL33Device::DrawPrimitives(PrimitiveType type, const Vertex *vertices,
|
|||
void CGL33Device::DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
|
||||
int first[], int count[], int drawCount)
|
||||
{
|
||||
return;
|
||||
|
||||
int vertexCount = 0;
|
||||
|
||||
for (int i = 0; i < drawCount; i++)
|
||||
|
@ -1068,23 +992,6 @@ void CGL33Device::SetClearColor(const Color &color)
|
|||
glClearColor(color.r, color.g, color.b, color.a);
|
||||
}
|
||||
|
||||
void CGL33Device::SetCullMode(CullMode mode)
|
||||
{
|
||||
// Cull clockwise back faces, so front face is the opposite
|
||||
// (assuming GL_CULL_FACE is GL_BACK)
|
||||
if (mode == CULL_CW ) glFrontFace(GL_CCW);
|
||||
else if (mode == CULL_CCW) glFrontFace(GL_CW);
|
||||
else assert(false);
|
||||
}
|
||||
|
||||
void CGL33Device::SetFillMode(FillMode mode)
|
||||
{
|
||||
if (mode == FillMode::POINT) glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
|
||||
else if (mode == FillMode::LINES) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
else if (mode == FillMode::POLY) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
else assert(false);
|
||||
}
|
||||
|
||||
void CGL33Device::CopyFramebufferToTexture(Texture& texture, int xOffset, int yOffset, int x, int y, int width, int height)
|
||||
{
|
||||
if (texture.id == 0) return;
|
||||
|
|
|
@ -135,10 +135,6 @@ public:
|
|||
void SetTexture(int index, unsigned int textureId) override;
|
||||
void SetTextureEnabled(int index, bool enabled) override;
|
||||
|
||||
void SetTextureStageParams(int index, const TextureStageParams ¶ms) override;
|
||||
|
||||
void SetTextureStageWrap(int index, Gfx::TexWrapMode wrapS, Gfx::TexWrapMode wrapT) override;
|
||||
|
||||
virtual void DrawPrimitive(PrimitiveType type, const Vertex *vertices , int vertexCount,
|
||||
Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
|
||||
virtual void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) override;
|
||||
|
@ -166,10 +162,6 @@ public:
|
|||
|
||||
void SetClearColor(const Color &color) override;
|
||||
|
||||
void SetCullMode(CullMode mode) override;
|
||||
|
||||
void SetFillMode(FillMode mode) override;
|
||||
|
||||
void CopyFramebufferToTexture(Texture& texture, int xOffset, int yOffset, int x, int y, int width, int height) override;
|
||||
|
||||
std::unique_ptr<CFrameBufferPixels> GetFrameBufferPixels() const override;
|
||||
|
@ -192,8 +184,6 @@ public:
|
|||
bool IsFramebufferSupported() override;
|
||||
|
||||
private:
|
||||
//! Updates the texture params for given texture stage
|
||||
void UpdateTextureParams(int index);
|
||||
//! Updates texture state
|
||||
inline void UpdateTextureState(int index);
|
||||
|
||||
|
|
|
@ -177,6 +177,10 @@ void CGL33ObjectRenderer::CGL33ObjectRenderer::Begin()
|
|||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthMask(GL_TRUE);
|
||||
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(GL_BACK);
|
||||
glFrontFace(GL_CW); // Colobot issue: faces are reversed
|
||||
|
||||
SetUVTransform({ 0.0f, 0.0f }, { 1.0f, 1.0f });
|
||||
}
|
||||
|
||||
|
@ -320,7 +324,6 @@ void CGL33ObjectRenderer::SetCullMode(bool enabled)
|
|||
if (enabled)
|
||||
{
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(GL_BACK);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -71,7 +71,7 @@ CGL33UIRenderer::CGL33UIRenderer(CGL33Device* device)
|
|||
// Generic buffer
|
||||
glGenBuffers(1, &m_bufferVBO);
|
||||
glBindBuffer(GL_COPY_WRITE_BUFFER, m_bufferVBO);
|
||||
glBufferData(GL_COPY_WRITE_BUFFER, m_bufferCapacity, nullptr, GL_STREAM_DRAW);
|
||||
glBufferData(GL_COPY_WRITE_BUFFER, m_bufferCapacity * sizeof(Vertex2D), nullptr, GL_STREAM_DRAW);
|
||||
|
||||
glGenVertexArrays(1, &m_bufferVAO);
|
||||
glBindVertexArray(m_bufferVAO);
|
||||
|
@ -106,8 +106,6 @@ CGL33UIRenderer::~CGL33UIRenderer()
|
|||
|
||||
void CGL33UIRenderer::SetProjection(float left, float right, float bottom, float top)
|
||||
{
|
||||
Flush();
|
||||
|
||||
m_uniforms.projectionMatrix = glm::ortho(left, right, bottom, top);
|
||||
m_uniformsDirty = true;
|
||||
}
|
||||
|
@ -116,8 +114,6 @@ void CGL33UIRenderer::SetTexture(const Texture& texture)
|
|||
{
|
||||
if (m_currentTexture == texture.id) return;
|
||||
|
||||
Flush();
|
||||
|
||||
glActiveTexture(GL_TEXTURE8);
|
||||
|
||||
m_currentTexture = texture.id;
|
||||
|
@ -130,88 +126,129 @@ void CGL33UIRenderer::SetTexture(const Texture& texture)
|
|||
|
||||
void CGL33UIRenderer::SetColor(const glm::vec4& color)
|
||||
{
|
||||
Flush();
|
||||
|
||||
m_uniforms.color = color;
|
||||
m_uniformsDirty = true;
|
||||
}
|
||||
|
||||
void CGL33UIRenderer::DrawPrimitive(PrimitiveType type, int count, const Vertex2D* vertices)
|
||||
void CGL33UIRenderer::SetTransparency(TransparencyMode mode)
|
||||
{
|
||||
// If too much data would be buffered, flush
|
||||
size_t totalSize = (m_buffer.size() + count) * sizeof(Vertex2D);
|
||||
|
||||
if (totalSize > m_bufferCapacity)
|
||||
Flush();
|
||||
|
||||
// Buffer data
|
||||
GLint first = m_buffer.size();
|
||||
|
||||
m_buffer.insert(m_buffer.end(), vertices, vertices + count);
|
||||
m_types.push_back(TranslateGfxPrimitive(type));
|
||||
m_firsts.push_back(first);
|
||||
m_counts.push_back(count);
|
||||
switch (mode)
|
||||
{
|
||||
case TransparencyMode::NONE:
|
||||
glDisable(GL_BLEND);
|
||||
break;
|
||||
case TransparencyMode::ALPHA:
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glBlendEquation(GL_FUNC_ADD);
|
||||
break;
|
||||
case TransparencyMode::BLACK:
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
|
||||
glBlendEquation(GL_FUNC_ADD);
|
||||
break;
|
||||
case TransparencyMode::WHITE:
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_DST_COLOR, GL_ZERO);
|
||||
glBlendEquation(GL_FUNC_ADD);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CGL33UIRenderer::Flush()
|
||||
void CGL33UIRenderer::DrawPrimitive(PrimitiveType type, int count, const Vertex2D* vertices)
|
||||
{
|
||||
if (m_types.empty()) return;
|
||||
auto ptr = BeginPrimitive(type, count);
|
||||
|
||||
UpdateUniforms();
|
||||
std::copy_n(vertices, count, ptr);
|
||||
|
||||
EndPrimitive();
|
||||
}
|
||||
|
||||
Vertex2D* CGL33UIRenderer::BeginPrimitive(PrimitiveType type, int count)
|
||||
{
|
||||
ClearGLErrors();
|
||||
|
||||
glBindVertexArray(m_bufferVAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, m_bufferVBO);
|
||||
|
||||
GLuint total = m_offset + count;
|
||||
|
||||
// Buffer full, orphan
|
||||
if (total >= m_bufferCapacity)
|
||||
{
|
||||
glBufferData(GL_ARRAY_BUFFER, m_bufferCapacity * sizeof(Vertex2D), nullptr, GL_STREAM_DRAW);
|
||||
|
||||
m_offset = 0;
|
||||
|
||||
// Respecify vertex attributes
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2D),
|
||||
reinterpret_cast<void*>(offsetof(Vertex2D, position)));
|
||||
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2D),
|
||||
reinterpret_cast<void*>(offsetof(Vertex2D, uv)));
|
||||
|
||||
glEnableVertexAttribArray(2);
|
||||
glVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex2D),
|
||||
reinterpret_cast<void*>(offsetof(Vertex2D, color)));
|
||||
}
|
||||
|
||||
auto ptr = glMapBufferRange(GL_ARRAY_BUFFER,
|
||||
m_offset * sizeof(Vertex2D),
|
||||
count * sizeof(Vertex2D),
|
||||
GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
|
||||
|
||||
m_mapped = true;
|
||||
m_type = type;
|
||||
m_count = count;
|
||||
|
||||
ClearGLErrors();
|
||||
CheckGLErrors();
|
||||
|
||||
// Mapping failed, use backup buffer
|
||||
if (ptr == nullptr)
|
||||
{
|
||||
m_backup = true;
|
||||
m_buffer.resize(count);
|
||||
|
||||
return m_buffer.data();
|
||||
}
|
||||
else
|
||||
{
|
||||
return reinterpret_cast<Vertex2D*>(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
bool CGL33UIRenderer::EndPrimitive()
|
||||
{
|
||||
if (!m_mapped) return false;
|
||||
|
||||
if (m_backup)
|
||||
{
|
||||
glBufferSubData(GL_ARRAY_BUFFER, m_offset * sizeof(Vertex2D), m_count * sizeof(Vertex2D), m_buffer.data());
|
||||
}
|
||||
else
|
||||
{
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
}
|
||||
|
||||
glUseProgram(m_program);
|
||||
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 0, m_uniformBuffer);
|
||||
|
||||
// Increase buffer size if necessary
|
||||
size_t size = m_buffer.size() * sizeof(Vertex2D);
|
||||
UpdateUniforms();
|
||||
|
||||
if (m_bufferCapacity < size)
|
||||
m_bufferCapacity = size;
|
||||
glDrawArrays(TranslateGfxPrimitive(m_type), m_offset, m_count);
|
||||
|
||||
// Send new vertices to GPU
|
||||
glBindBuffer(GL_ARRAY_BUFFER, m_bufferVBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, m_bufferCapacity, nullptr, GL_STREAM_DRAW);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, size, m_buffer.data());
|
||||
m_offset += m_count;
|
||||
|
||||
// Respecify vertex attributes
|
||||
glBindVertexArray(m_bufferVAO);
|
||||
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2D),
|
||||
reinterpret_cast<void*>(offsetof(Vertex2D, position)));
|
||||
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2D),
|
||||
reinterpret_cast<void*>(offsetof(Vertex2D, uv)));
|
||||
|
||||
glEnableVertexAttribArray(2);
|
||||
glVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex2D),
|
||||
reinterpret_cast<void*>(offsetof(Vertex2D, color)));
|
||||
|
||||
// Draw primitives by grouping by type
|
||||
for (size_t i = 0; i < m_types.size(); i++)
|
||||
{
|
||||
size_t count = 1;
|
||||
|
||||
for (; i + count < m_types.size(); count++)
|
||||
{
|
||||
if (m_types[i] != m_types[i + count])
|
||||
break;
|
||||
}
|
||||
|
||||
glMultiDrawArrays(m_types[i], &m_firsts[i], &m_counts[i], count);
|
||||
|
||||
i += count;
|
||||
}
|
||||
|
||||
// Clear buffers
|
||||
m_buffer.clear();
|
||||
m_types.clear();
|
||||
m_firsts.clear();
|
||||
m_counts.clear();
|
||||
m_mapped = false;
|
||||
m_backup = false;
|
||||
|
||||
m_device->Restore();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGL33UIRenderer::UpdateUniforms()
|
||||
|
@ -336,6 +373,7 @@ void CGL33TerrainRenderer::Begin()
|
|||
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(GL_BACK);
|
||||
glFrontFace(GL_CW); // Colobot issue: faces are reversed
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
|
@ -475,11 +513,6 @@ void CGL33TerrainRenderer::DrawObject(const glm::mat4& matrix, const CVertexBuff
|
|||
glDrawArrays(TranslateGfxPrimitive(b->GetType()), 0, b->Size());
|
||||
}
|
||||
|
||||
void CGL33TerrainRenderer::Flush()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CGL33ShadowRenderer::CGL33ShadowRenderer(CGL33Device* device)
|
||||
: m_device(device)
|
||||
{
|
||||
|
@ -636,9 +669,4 @@ void CGL33ShadowRenderer::DrawObject(const CVertexBuffer* buffer, bool transpare
|
|||
glDrawArrays(TranslateGfxPrimitive(b->GetType()), 0, b->Size());
|
||||
}
|
||||
|
||||
void CGL33ShadowRenderer::Flush()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
} // namespace Gfx
|
||||
|
|
|
@ -46,10 +46,12 @@ public:
|
|||
virtual void SetProjection(float left, float right, float bottom, float top) override;
|
||||
virtual void SetTexture(const Texture& texture) override;
|
||||
virtual void SetColor(const glm::vec4& color) override;
|
||||
virtual void SetTransparency(TransparencyMode mode) override;
|
||||
|
||||
virtual void DrawPrimitive(PrimitiveType type, int count, const Vertex2D* vertices) override;
|
||||
|
||||
virtual void Flush() override;
|
||||
virtual Vertex2D* BeginPrimitive(PrimitiveType type, int count) override;
|
||||
virtual bool EndPrimitive() override;
|
||||
|
||||
private:
|
||||
void UpdateUniforms();
|
||||
|
@ -76,12 +78,16 @@ private:
|
|||
GLuint m_bufferVAO = 0;
|
||||
// VBO capacity
|
||||
GLsizei m_bufferCapacity = 4 * 1024;
|
||||
|
||||
// Buffer mapping state
|
||||
PrimitiveType m_type = {};
|
||||
GLuint m_offset = 0;
|
||||
GLuint m_count = 0;
|
||||
bool m_mapped = false;
|
||||
bool m_backup = false;
|
||||
|
||||
// Buffered vertex data
|
||||
std::vector<Vertex2D> m_buffer;
|
||||
std::vector<GLenum> m_types;
|
||||
std::vector<GLint> m_firsts;
|
||||
std::vector<GLsizei> m_counts;
|
||||
|
||||
// Shader program
|
||||
GLuint m_program = 0;
|
||||
|
@ -127,8 +133,6 @@ public:
|
|||
//! Draws terrain object
|
||||
virtual void DrawObject(const glm::mat4& matrix, const CVertexBuffer* buffer) override;
|
||||
|
||||
virtual void Flush() override;
|
||||
|
||||
private:
|
||||
CGL33Device* const m_device;
|
||||
|
||||
|
@ -196,8 +200,6 @@ public:
|
|||
//! Draws terrain object
|
||||
virtual void DrawObject(const CVertexBuffer* buffer, bool transparent) override;
|
||||
|
||||
virtual void Flush() override;
|
||||
|
||||
private:
|
||||
CGL33Device* const m_device;
|
||||
|
||||
|
|
|
@ -40,6 +40,6 @@ void main()
|
|||
{
|
||||
gl_Position = uni_Matrix * in_VertexCoord;
|
||||
|
||||
data.Color = uni_Color * in_Color;
|
||||
data.Color = in_Color;
|
||||
data.TexCoord = in_TexCoord;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "graphics/engine/engine.h"
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
|
||||
|
||||
namespace Ui
|
||||
|
@ -170,8 +171,12 @@ void CButton::Draw()
|
|||
(m_state & STATE_CARD ) == 0 &&
|
||||
(m_state & STATE_SIMPLY) == 0 )
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
dp = 0.5f / 256.0f;
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "common/restext.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
#include "graphics/engine/text.h"
|
||||
|
||||
|
@ -94,6 +95,7 @@ void CCheck::Draw()
|
|||
int icon;
|
||||
|
||||
auto device = m_engine->GetDevice();
|
||||
auto renderer = device->GetUIRenderer();
|
||||
|
||||
if ( (m_state & STATE_VISIBLE) == 0 ) return;
|
||||
|
||||
|
@ -105,8 +107,9 @@ void CCheck::Draw()
|
|||
DrawShadow(m_pos, m_dim);
|
||||
}
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
zoomExt = 1.00f;
|
||||
zoomInt = 0.95f;
|
||||
|
@ -140,7 +143,7 @@ void CCheck::Draw()
|
|||
|
||||
if ( (m_state & STATE_DEAD) == 0 )
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
if ( m_state & STATE_CHECK )
|
||||
{
|
||||
|
|
|
@ -136,8 +136,11 @@ void CColor::Draw()
|
|||
DrawShadow(m_pos, m_dim);
|
||||
}
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
CControl::Draw();
|
||||
|
||||
p1.x = m_pos.x + (3.0f / 640.0f);
|
||||
|
@ -149,16 +152,14 @@ void CColor::Draw()
|
|||
|
||||
glm::u8vec4 col = { color.r * 255, color.g * 255, color.b * 255, color.a * 255 };
|
||||
|
||||
m_engine->SetUITexture(Gfx::Texture{0}); // no texture
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
renderer->SetTexture(Gfx::Texture{0});
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
vertex[0] = { { p1.x, p1.y }, {}, col };
|
||||
vertex[1] = { { p1.x, p2.y }, {}, col };
|
||||
vertex[2] = { { p2.x, p1.y }, {}, col };
|
||||
vertex[3] = { { p2.x, p2.y }, {}, col };
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
renderer->DrawPrimitive(Gfx::PrimitiveType::TRIANGLE_STRIP, 4, vertex);
|
||||
m_engine->AddStatisticTriangle(2);
|
||||
}
|
||||
|
|
|
@ -451,9 +451,11 @@ void CControl::Draw()
|
|||
|
||||
if ( (m_state & STATE_VISIBLE) == 0 ) return;
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
auto device = m_engine->GetDevice();
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
zoomExt = 1.00f;
|
||||
zoomInt = 0.95f;
|
||||
|
@ -506,7 +508,8 @@ void CControl::Draw()
|
|||
|
||||
if ( m_state & STATE_OKAY )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
icon = 3; // yellow with green point pressed
|
||||
}
|
||||
|
||||
|
@ -518,7 +521,8 @@ void CControl::Draw()
|
|||
if ( m_state & STATE_DEAD ) return;
|
||||
|
||||
icon = SetButtonTextureForIcon(m_icon);
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
//m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
if ( icon != -1 )
|
||||
{
|
||||
DrawPart(icon, zoomInt, 0.0f);
|
||||
|
@ -740,14 +744,17 @@ void CControl::DrawWarning(const glm::vec2& position, const glm::vec2& dimension
|
|||
glm::vec2 uv1, uv2;
|
||||
float dp;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
glm::vec2 pos = position;
|
||||
glm::vec2 dim = dimension;
|
||||
|
||||
dp = 0.5f / 256.0f;
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto device = m_engine->GetDevice();
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
uv1.x = 64.0f / 256.0f;
|
||||
uv1.y = 208.0f / 256.0f;
|
||||
|
@ -788,14 +795,17 @@ void CControl::DrawShadow(const glm::vec2& position, const glm::vec2& dimension,
|
|||
glm::vec2 uv1, uv2, corner;
|
||||
float dp;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
glm::vec2 pos = position;
|
||||
glm::vec2 dim = dimension;
|
||||
|
||||
dp = 0.5f/256.0f;
|
||||
|
||||
m_engine->SetState( Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto device = m_engine->GetDevice();
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
pos.x += deep * 0.010f * 0.75f;
|
||||
pos.y -= deep * 0.015f;
|
||||
|
@ -846,7 +856,8 @@ int CControl::SetButtonTextureForIcon(int icon)
|
|||
int iconIdx = icon%64;
|
||||
int buttonFile = (icon/64) + 1;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button" + StrUtils::ToString<int>(buttonFile) + ".png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button" + StrUtils::ToString<int>(buttonFile) + ".png");
|
||||
m_engine->GetDevice()->GetUIRenderer()->SetTexture(texture);
|
||||
|
||||
return iconIdx;
|
||||
}
|
||||
|
|
|
@ -1177,7 +1177,8 @@ void CEdit::DrawImage(const glm::vec2& pos, std::string name, float width,
|
|||
glm::vec2 uv1, uv2, dim;
|
||||
float dp;
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
m_engine->GetDevice()->GetUIRenderer()->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
//m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
|
||||
Gfx::TextureCreateParams params;
|
||||
params.format = Gfx::TEX_IMG_AUTO;
|
||||
|
@ -1185,7 +1186,7 @@ void CEdit::DrawImage(const glm::vec2& pos, std::string name, float width,
|
|||
params.padToNearestPowerOfTwo = true;
|
||||
Gfx::Texture tex = m_engine->LoadTexture(PrepareImageFilename(name), params);
|
||||
|
||||
m_engine->SetUITexture(tex);
|
||||
m_engine->GetDevice()->GetUIRenderer()->SetTexture(tex);
|
||||
|
||||
uv1.x = 0.0f;
|
||||
uv2.x = 1.0f;
|
||||
|
@ -1217,8 +1218,11 @@ void CEdit::DrawBack(const glm::vec2& pos, const glm::vec2& dim)
|
|||
|
||||
if ( m_bGeneric ) return;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
if ( m_bMulti )
|
||||
{
|
||||
|
@ -1262,7 +1266,8 @@ void CEdit::DrawBack(const glm::vec2& pos, const glm::vec2& dim)
|
|||
|
||||
void CEdit::DrawHorizontalGradient(const glm::vec2& pos, const glm::vec2& dim, Gfx::Color color1, Gfx::Color color2)
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_OPAQUE_COLOR);
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
glm::vec2 p1, p2;
|
||||
p1.x = pos.x;
|
||||
|
@ -1281,8 +1286,6 @@ void CEdit::DrawHorizontalGradient(const glm::vec2& pos, const glm::vec2& dim, G
|
|||
{ { p2.x, p2.y }, {}, col2 }
|
||||
};
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
renderer->DrawPrimitive(Gfx::PrimitiveType::TRIANGLE_STRIP, 4, quad);
|
||||
m_engine->AddStatisticTriangle(2);
|
||||
}
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#include "ui/controls/gauge.h"
|
||||
|
||||
#include "graphics/engine/engine.h"
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
|
||||
|
||||
namespace Ui
|
||||
|
@ -78,8 +80,11 @@ void CGauge::Draw()
|
|||
|
||||
if ( (m_state & STATE_VISIBLE) == 0 ) return;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
dp = 0.5f/256.0f;
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "common/restext.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
|
||||
#include "math/func.h"
|
||||
|
@ -93,10 +94,13 @@ void CGroup::Draw()
|
|||
|
||||
dp = 0.5f / 256.0f;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
if ( m_icon == 0 ) // hollow frame?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
uv1.x = 160.0f / 256.0f;
|
||||
uv1.y = 192.0f / 256.0f; // u-v texture
|
||||
|
@ -112,8 +116,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 1 ) // orange solid opaque?
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
uv1.x = 104.0f / 256.0f;
|
||||
uv1.y = 48.0f / 256.0f;
|
||||
|
@ -127,8 +132,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 2 ) // orange degrade -> transparent?
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
uv1.x = 112.0f / 256.0f;
|
||||
uv1.y = 48.0f / 256.0f;
|
||||
|
@ -142,8 +148,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 3 ) // transparent gradient -> gray?
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
uv1.x = 120.0f / 256.0f;
|
||||
uv1.y = 48.0f / 256.0f;
|
||||
|
@ -157,8 +164,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 4 ) // degrade blue corner?
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
uv1.x = 192.0f / 256.0f;
|
||||
uv1.y = 128.0f / 256.0f;
|
||||
|
@ -172,8 +180,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 5 ) // degrade orange corner?
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
uv1.x = 224.0f / 256.0f;
|
||||
uv1.y = 128.0f / 256.0f;
|
||||
|
@ -187,8 +196,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 6 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
|
||||
uv1.x = 0.0f / 256.0f; // brown transparent
|
||||
uv1.y = 75.0f / 256.0f;
|
||||
|
@ -204,8 +214,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 7 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
uv1.x = 64.0f / 256.0f;
|
||||
uv1.y = 0.0f / 256.0f;
|
||||
|
@ -219,8 +230,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 8 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
|
||||
uv1.x = 64.0f / 256.0f; // green transparent
|
||||
uv1.y = 160.0f / 256.0f;
|
||||
|
@ -234,8 +246,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 9 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
|
||||
uv1.x = 64.0f / 256.0f; // red transparent
|
||||
uv1.y = 176.0f/256.0f;
|
||||
|
@ -249,8 +262,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 10 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
|
||||
uv1.x = 64.0f / 256.0f; // blue transparent
|
||||
uv1.y = 192.0f / 256.0f;
|
||||
|
@ -264,8 +278,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 11 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
uv1.x = 64.0f / 256.0f; // yellow transparent
|
||||
uv1.y = 224.0f / 256.0f;
|
||||
uv2.x = 160.0f / 256.0f;
|
||||
|
@ -281,8 +296,9 @@ void CGroup::Draw()
|
|||
dim.x = m_dim.x / 2.0f;
|
||||
dim.y = m_dim.y / 2.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/mouse.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/mouse.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
pos.x = m_pos.x-m_dim.x/300.0f;
|
||||
pos.y = m_pos.y+m_dim.y/300.0f+dim.y;
|
||||
uv1.x = 0.5f / 256.0f;
|
||||
|
@ -300,7 +316,7 @@ void CGroup::Draw()
|
|||
Math::Swap(uv1.x, uv2.x);
|
||||
DrawIcon(pos, dim, uv1, uv2); // dl
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
pos.x = m_pos.x+m_dim.x/300.0f;
|
||||
pos.y = m_pos.y-m_dim.y/300.0f+dim.y;
|
||||
uv1.x = 64.5f / 256.0f;
|
||||
|
@ -320,8 +336,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 13 ) // corner upper / left?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/mouse.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/mouse.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
pos.x = m_pos.x-m_dim.x/150.0f;
|
||||
pos.y = m_pos.y+m_dim.y/150.0f;
|
||||
uv1.x = 128.5f / 256.0f;
|
||||
|
@ -330,7 +347,7 @@ void CGroup::Draw()
|
|||
uv2.y = 255.5f / 256.0f;
|
||||
DrawIcon(pos, m_dim, uv1, uv2);
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
pos.x = m_pos.x+m_dim.x/150.0f;
|
||||
pos.y = m_pos.y-m_dim.y/150.0f;
|
||||
uv1.x = 192.5f / 256.0f;
|
||||
|
@ -341,8 +358,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 14 ) // corner upper / right?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/mouse.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/mouse.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
pos.x = m_pos.x-m_dim.x/150.0f;
|
||||
pos.y = m_pos.y+m_dim.y/150.0f;
|
||||
uv2.x = 128.5f / 256.0f;
|
||||
|
@ -351,7 +369,7 @@ void CGroup::Draw()
|
|||
uv2.y = 255.5f / 256.0f;
|
||||
DrawIcon(pos, m_dim, uv1, uv2);
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
pos.x = m_pos.x+m_dim.x/150.0f;
|
||||
pos.y = m_pos.y-m_dim.y/150.0f;
|
||||
uv2.x = 192.5f / 256.0f;
|
||||
|
@ -362,8 +380,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 15 ) // corner lower / left?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/mouse.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/mouse.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
pos.x = m_pos.x-m_dim.x/150.0f;
|
||||
pos.y = m_pos.y+m_dim.y/150.0f;
|
||||
uv1.x = 128.5f / 256.0f;
|
||||
|
@ -372,7 +391,7 @@ void CGroup::Draw()
|
|||
uv1.y = 255.5f / 256.0f;
|
||||
DrawIcon(pos, m_dim, uv1, uv2);
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
pos.x = m_pos.x+m_dim.x/150.0f;
|
||||
pos.y = m_pos.y-m_dim.y/150.0f;
|
||||
uv1.x = 192.5f / 256.0f;
|
||||
|
@ -383,8 +402,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 16 ) // corner lower / left?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/mouse.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/mouse.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
pos.x = m_pos.x-m_dim.x/150.0f;
|
||||
pos.y = m_pos.y+m_dim.y/150.0f;
|
||||
uv2.x = 128.5f / 256.0f;
|
||||
|
@ -393,7 +413,7 @@ void CGroup::Draw()
|
|||
uv1.y = 255.5f / 256.0f;
|
||||
DrawIcon(pos, m_dim, uv1, uv2);
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
pos.x = m_pos.x+m_dim.x/150.0f;
|
||||
pos.y = m_pos.y-m_dim.y/150.0f;
|
||||
uv2.x = 192.5f / 256.0f;
|
||||
|
@ -404,8 +424,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 17 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 0.0f / 256.0f; // blue frame
|
||||
uv1.y = 75.0f / 256.0f;
|
||||
uv2.x = 64.0f / 256.0f;
|
||||
|
@ -420,8 +441,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 18 ) // arrow> for SatCom?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 0.0f / 256.0f; // >
|
||||
uv1.y = 192.0f / 256.0f;
|
||||
uv2.x = 32.0f / 256.0f;
|
||||
|
@ -434,8 +456,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 19 ) // SatCom symbol?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 224.0f / 256.0f; // SatCom symbol
|
||||
uv1.y = 224.0f / 256.0f;
|
||||
uv2.x = 256.0f / 256.0f;
|
||||
|
@ -448,8 +471,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 20 ) // solid blue background?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 224.0f / 256.0f;
|
||||
uv1.y = 32.0f / 256.0f;
|
||||
uv2.x = 256.0f / 256.0f;
|
||||
|
@ -462,8 +486,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 21 ) // stand-by symbol?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 160.0f / 256.0f;
|
||||
uv1.y = 32.0f / 256.0f;
|
||||
uv2.x = 192.0f / 256.0f;
|
||||
|
@ -476,8 +501,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 22 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f / 256.0f; // opaque yellow
|
||||
uv1.y = 224.0f / 256.0f;
|
||||
uv2.x = 160.0f / 256.0f;
|
||||
|
@ -493,8 +519,9 @@ void CGroup::Draw()
|
|||
|
||||
if ( m_icon == 23 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f / 256.0f; // yellow
|
||||
uv1.y = 192.0f / 256.0f;
|
||||
uv2.x = 80.0f / 256.0f;
|
||||
|
@ -509,8 +536,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 24 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 80.0f / 256.0f; // orange
|
||||
uv1.y = 192.0f / 256.0f;
|
||||
uv2.x = 96.0f / 256.0f;
|
||||
|
@ -525,8 +553,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 25 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f / 256.0f; // orange
|
||||
uv1.y = 208.0f / 256.0f;
|
||||
uv2.x = 80.0f / 256.0f;
|
||||
|
@ -541,8 +570,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 26 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 80.0f / 256.0f; // red
|
||||
uv1.y = 208.0f / 256.0f;
|
||||
uv2.x = 96.0f / 256.0f;
|
||||
|
@ -557,8 +587,9 @@ void CGroup::Draw()
|
|||
}
|
||||
if ( m_icon == 27 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 32.0f / 256.0f;
|
||||
uv1.y = 0.0f / 256.0f;
|
||||
uv2.x = 64.0f / 256.0f;
|
||||
|
@ -572,10 +603,11 @@ void CGroup::Draw()
|
|||
|
||||
if ( m_icon >= 100 && m_icon <= 120 ) // building?
|
||||
{
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
pos = m_pos;
|
||||
dim = m_dim;
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
uv1.x = 32.0f / 256.0f;
|
||||
uv1.y = 32.0f / 256.0f;
|
||||
uv2.x = uv1.x+32.0f/256.0f;
|
||||
|
@ -586,8 +618,9 @@ void CGroup::Draw()
|
|||
uv2.y -= dp;
|
||||
DrawIcon(pos, dim, uv1, uv2);
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
pos.x += 8.0f / 640.0f;
|
||||
pos.y += 8.0f / 480.0f;
|
||||
dim.x -= 16.0f / 640.0f;
|
||||
|
@ -602,7 +635,7 @@ void CGroup::Draw()
|
|||
uv2.y -= dp;
|
||||
DrawIcon(pos, dim, uv1, uv2);
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
pos.x += 2.0f / 640.0f;
|
||||
pos.y += 2.0f / 480.0f;
|
||||
dim.x -= 4.0f / 640.0f;
|
||||
|
@ -617,7 +650,7 @@ void CGroup::Draw()
|
|||
uv2.y -= dp;
|
||||
DrawIcon(pos, dim, uv1, uv2);
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
pos.x += 8.0f / 640.0f;
|
||||
pos.y += 8.0f / 480.0f;
|
||||
dim.x -= 16.0f / 640.0f;
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#include "common/event.h"
|
||||
#include "common/restext.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
|
||||
|
||||
|
@ -91,6 +93,8 @@ void CImage::Draw()
|
|||
glm::vec2 uv1,uv2, corner, pos, dim;
|
||||
float dp;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
if ( (m_state & STATE_VISIBLE) == 0 ) return;
|
||||
|
||||
if ( m_state & STATE_SHADOW )
|
||||
|
@ -102,8 +106,9 @@ void CImage::Draw()
|
|||
|
||||
if ( m_icon == 0 ) // hollow frame?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 160.0f / 256.0f;
|
||||
uv1.y = 192.0f / 256.0f; // u-v texture
|
||||
uv2.x = 192.0f / 256.0f;
|
||||
|
@ -124,8 +129,8 @@ void CImage::Draw()
|
|||
params.filter = Gfx::TEX_FILTER_BILINEAR;
|
||||
params.padToNearestPowerOfTwo = true;
|
||||
Gfx::Texture tex = m_engine->LoadTexture(m_filename, params);
|
||||
m_engine->SetUITexture(tex);
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
renderer->SetTexture(tex);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
pos = m_pos;
|
||||
dim = m_dim;
|
||||
pos.x += 5.0f / 640.0f;
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#include "common/global.h"
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
|
||||
#include "sound/sound.h"
|
||||
|
@ -134,9 +136,11 @@ void CKey::Draw()
|
|||
if (m_state & STATE_SHADOW)
|
||||
DrawShadow(m_pos, m_dim);
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
float zoomExt = 1.00f;
|
||||
float zoomInt = 0.95f;
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
#include "common/make_unique.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
|
||||
#include "math/func.h"
|
||||
|
@ -366,14 +368,17 @@ void CList::Draw()
|
|||
|
||||
dp = 0.5f / 256.0f;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
if (m_icon != -1)
|
||||
{
|
||||
dim = m_dim;
|
||||
|
||||
if (m_icon == 0)
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
uv1.x = 128.0f / 256.0f;
|
||||
uv1.y = 64.0f / 256.0f; // u-v texture
|
||||
|
@ -382,8 +387,9 @@ void CList::Draw()
|
|||
}
|
||||
else
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
|
||||
uv1.x = 132.0f / 256.0f;
|
||||
uv1.y = 68.0f / 256.0f; // u-v texture
|
||||
|
@ -418,8 +424,9 @@ void CList::Draw()
|
|||
dim.y *= 0.4f;
|
||||
pos.y -= dim.y;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE); // was D3DSTATETTw
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 120.0f / 256.0f;
|
||||
uv1.y = 64.0f / 256.0f;
|
||||
uv2.x = 128.0f / 256.0f;
|
||||
|
@ -493,8 +500,9 @@ void CList::Draw()
|
|||
|
||||
if (m_items[i + m_firstLine].check)
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f / 256.0f;
|
||||
uv1.y = 0.0f / 256.0f;
|
||||
uv2.x = 96.0f / 256.0f;
|
||||
|
@ -505,7 +513,7 @@ void CList::Draw()
|
|||
uv2.y -= dp;
|
||||
DrawIcon(pos, dim, uv1, uv2); // square shape
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE); // was D3DSTATETTw
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 0.0f / 256.0f; // v
|
||||
uv1.y = 64.0f / 256.0f;
|
||||
uv2.x = 32.0f / 256.0f;
|
||||
|
@ -518,8 +526,9 @@ void CList::Draw()
|
|||
}
|
||||
else
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE); // was D3DSTATETTw
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
if ( i + m_firstLine == m_selectLine )
|
||||
{
|
||||
uv1.x =224.0f / 256.0f; // <
|
||||
|
|
|
@ -335,6 +335,8 @@ void CMap::Draw()
|
|||
glm::vec2 uv1, uv2;
|
||||
int i;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
if ( (m_state & STATE_VISIBLE) == 0 )
|
||||
return;
|
||||
|
||||
|
@ -348,23 +350,28 @@ void CMap::Draw()
|
|||
|
||||
if (m_fixImage.empty()) // drawing of the relief?
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/map.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/map.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
uv1.x = 0.5f + (m_offset.x - (m_half / m_zoom)) / (m_half * 2.0f);
|
||||
uv1.y = 0.5f - (m_offset.y + (m_half / m_zoom)) / (m_half * 2.0f);
|
||||
uv2.x = 0.5f + (m_offset.x + (m_half / m_zoom)) / (m_half * 2.0f);
|
||||
uv2.y = 0.5f - (m_offset.y - (m_half / m_zoom)) / (m_half * 2.0f);
|
||||
|
||||
DrawVertex(uv1, uv2, 0.97f); // drawing the map
|
||||
}
|
||||
else // still image?
|
||||
{
|
||||
m_engine->LoadTexture(m_fixImage);
|
||||
m_engine->SetUITexture(m_fixImage);
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture(m_fixImage);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
uv1.x = 0.0f;
|
||||
uv1.y = 0.0f;
|
||||
uv2.x = 1.0f;
|
||||
uv2.y = 1.0f;
|
||||
|
||||
DrawVertex(uv1, uv2, 0.97f); // drawing the map
|
||||
}
|
||||
|
||||
|
@ -499,8 +506,11 @@ void CMap::DrawFocus(const glm::vec2& position, float dir, ObjectType type, MapC
|
|||
uv2.x = 126.0f/256.0f;
|
||||
uv2.y = 255.0f/256.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
bEnding = false;
|
||||
do
|
||||
|
@ -551,6 +561,8 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
dim.x = 2.0f/128.0f*0.75f;
|
||||
dim.y = 2.0f/128.0f;
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
if ( bOut ) // outside the map?
|
||||
{
|
||||
if ( color == MAPCOLOR_BBOX && !m_bRadar ) return;
|
||||
|
@ -561,8 +573,10 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
return; // flashes
|
||||
}
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
if ( bUp )
|
||||
{
|
||||
uv1.x = 160.5f/256.0f; // yellow triangle ^
|
||||
|
@ -704,8 +718,10 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
{
|
||||
if ( bSelect )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
if ( m_bToy )
|
||||
{
|
||||
uv1.x = 164.5f/256.0f; // black pentagon
|
||||
|
@ -730,8 +746,9 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
{
|
||||
if ( m_bRadar )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 64.5f/256.0f; // blue triangle
|
||||
uv1.y = 240.5f/256.0f;
|
||||
uv2.x = 79.0f/256.0f;
|
||||
|
@ -750,8 +767,9 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
|
||||
if ( color == MAPCOLOR_WAYPOINTb )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 192.5f/256.0f; // blue cross
|
||||
uv1.y = 240.5f/256.0f;
|
||||
uv2.x = 207.0f/256.0f;
|
||||
|
@ -760,8 +778,9 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
}
|
||||
if ( color == MAPCOLOR_WAYPOINTr )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 208.5f/256.0f; // red cross
|
||||
uv1.y = 240.5f/256.0f;
|
||||
uv2.x = 223.0f/256.0f;
|
||||
|
@ -770,8 +789,9 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
}
|
||||
if ( color == MAPCOLOR_WAYPOINTg )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 224.5f/256.0f; // green cross
|
||||
uv1.y = 240.5f/256.0f;
|
||||
uv2.x = 239.0f/256.0f;
|
||||
|
@ -780,8 +800,9 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
}
|
||||
if ( color == MAPCOLOR_WAYPOINTy )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 240.5f/256.0f; // yellow cross
|
||||
uv1.y = 240.5f/256.0f;
|
||||
uv2.x = 255.0f/256.0f;
|
||||
|
@ -790,8 +811,9 @@ void CMap::DrawObject(const glm::vec2& position, float dir, ObjectType type, Map
|
|||
}
|
||||
if ( color == MAPCOLOR_WAYPOINTv )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 192.5f/256.0f; // violet cross
|
||||
uv1.y = 224.5f/256.0f;
|
||||
uv2.x = 207.0f/256.0f;
|
||||
|
@ -811,8 +833,12 @@ void CMap::DrawObjectIcon(const glm::vec2& pos, const glm::vec2& dim, MapColor c
|
|||
|
||||
dp = 0.5f/256.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
if ( color == MAPCOLOR_MOVE )
|
||||
{
|
||||
uv1.x = 160.0f/256.0f; // blue
|
||||
|
@ -915,11 +941,15 @@ void CMap::DrawObjectIcon(const glm::vec2& pos, const glm::vec2& dim, MapColor c
|
|||
case OBJECT_MOBILEit:
|
||||
case OBJECT_MOBILErp:
|
||||
case OBJECT_MOBILEst:
|
||||
m_engine->SetUITexture("textures/interface/button4.png"); break;
|
||||
{
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button4.png");
|
||||
renderer->SetTexture(texture);
|
||||
break;
|
||||
}
|
||||
default: ; // button3.png
|
||||
}
|
||||
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = (32.0f/256.0f)*(icon%8);
|
||||
uv1.y = (32.0f/256.0f)*(icon/8);
|
||||
uv2.x = uv1.x+32.0f/256.0f;
|
||||
|
@ -952,8 +982,12 @@ void CMap::DrawHighlight(const glm::vec2& position)
|
|||
dim.x *= 2.0f+cosf(m_time*8.0f)*0.5f;
|
||||
dim.y *= 2.0f+cosf(m_time*8.0f)*0.5f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
uv1.x = 160.5f/256.0f; // hilite
|
||||
uv1.y = 224.5f/256.0f;
|
||||
uv2.x = 175.0f/256.0f;
|
||||
|
@ -1090,9 +1124,13 @@ void CMap::UpdateTerrain()
|
|||
}
|
||||
}
|
||||
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
m_engine->DeleteTexture("interface/map.png");
|
||||
m_engine->LoadTexture("textures/interface/map.png", &img);
|
||||
m_engine->SetUITexture("textures/interface/map.png");
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/map.png");
|
||||
renderer->SetTexture(texture);
|
||||
}
|
||||
|
||||
// Updates the field in the map.
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "common/make_unique.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
|
||||
#include "ui/controls/button.h"
|
||||
|
@ -364,11 +365,13 @@ void CScroll::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
float ex, dp;
|
||||
|
||||
auto device = m_engine->GetDevice();
|
||||
auto renderer = device->GetUIRenderer();
|
||||
|
||||
if ( icon == 0 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 0.0f/256.0f; // yellow rectangle
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 32.0f/256.0f;
|
||||
|
@ -377,8 +380,9 @@ void CScroll::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
}
|
||||
else if ( icon == 1 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 128.0f/256.0f; // gray rectangle
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -387,8 +391,9 @@ void CScroll::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
}
|
||||
else if ( icon == 2 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f/256.0f; // blue rectangle
|
||||
uv1.y = 0.0f/256.0f;
|
||||
uv2.x = 96.0f/256.0f;
|
||||
|
@ -397,8 +402,9 @@ void CScroll::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
}
|
||||
else
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 104.0f/256.0f; // blue line -
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 128.0f/256.0f;
|
||||
|
|
|
@ -89,28 +89,28 @@ bool CShortcut::EventProcess(const Event &event)
|
|||
void CShortcut::Draw()
|
||||
{
|
||||
float zoom;
|
||||
int icon, mode;
|
||||
int icon;
|
||||
|
||||
icon = 0;
|
||||
zoom = 0.8f;
|
||||
mode = Gfx::ENG_RSTATE_TTEXTURE_WHITE;
|
||||
Gfx::TransparencyMode mode = Gfx::TransparencyMode::WHITE;
|
||||
if ( m_state & STATE_HILIGHT )
|
||||
{
|
||||
icon = 4;
|
||||
zoom = 0.9f;
|
||||
mode = Gfx::ENG_RSTATE_NORMAL;
|
||||
mode = Gfx::TransparencyMode::NONE;
|
||||
}
|
||||
if ( m_state & STATE_CHECK )
|
||||
{
|
||||
icon = 1;
|
||||
zoom = 0.8f;
|
||||
mode = Gfx::ENG_RSTATE_NORMAL;
|
||||
mode = Gfx::TransparencyMode::NONE;
|
||||
}
|
||||
if ( m_state & STATE_PRESS )
|
||||
{
|
||||
icon = 1;
|
||||
zoom = 1.0f;
|
||||
mode = Gfx::ENG_RSTATE_NORMAL;
|
||||
mode = Gfx::TransparencyMode::NONE;
|
||||
}
|
||||
if ( m_icon == 128+6 || m_icon == 128+7 || m_icon == 58 ) // pause or film?
|
||||
{
|
||||
|
@ -118,22 +118,25 @@ void CShortcut::Draw()
|
|||
zoom = 1.0f;
|
||||
}
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
auto renderer = m_engine->GetDevice()->GetUIRenderer();
|
||||
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
|
||||
if ( icon != -1 )
|
||||
{
|
||||
m_engine->SetState(mode);
|
||||
renderer->SetTransparency(mode);
|
||||
DrawVertex(icon, 0.95f);
|
||||
}
|
||||
|
||||
icon = SetButtonTextureForIcon(m_icon);
|
||||
if (m_icon == 58)
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
}
|
||||
DrawVertex(icon, zoom);
|
||||
|
||||
|
@ -142,8 +145,9 @@ void CShortcut::Draw()
|
|||
glm::vec2 p1, p2, c, uv1, uv2;
|
||||
float dp;
|
||||
|
||||
m_engine->SetTexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
zoom = 0.9f+sinf(m_time*8.0f)*0.1f;
|
||||
|
||||
|
@ -182,8 +186,9 @@ void CShortcut::Draw()
|
|||
glm::vec2 uv1, uv2;
|
||||
float dp;
|
||||
|
||||
m_engine->SetTexture("textures/interface/button3.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
|
||||
uv1.x = 160.0f/256.0f;
|
||||
uv1.y = 0.0f/256.0f;
|
||||
|
@ -203,8 +208,9 @@ void CShortcut::Draw()
|
|||
glm::vec2 uv1, uv2;
|
||||
float dp;
|
||||
|
||||
m_engine->SetTexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
|
||||
uv1.x = 159.0f / 256.0f;
|
||||
uv1.y = 240.0f / 256.0f;
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "common/stringutils.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
#include "graphics/engine/text.h"
|
||||
|
||||
|
@ -494,8 +495,9 @@ void CSlider::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
|
||||
if ( icon == 0 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 0.0f/256.0f; // yellow rectangle
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 32.0f/256.0f;
|
||||
|
@ -506,8 +508,9 @@ void CSlider::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
}
|
||||
else if ( icon == 1 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 128.0f/256.0f; // gray rectangle
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -518,8 +521,9 @@ void CSlider::DrawVertex(const glm::vec2& pos, const glm::vec2& dim, int icon)
|
|||
}
|
||||
else
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 224.0f/256.0f; // cursor
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 256.0f/256.0f;
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "ui/controls/target.h"
|
||||
|
||||
#include "graphics/core/device.h"
|
||||
#include "graphics/core/renderers.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
@ -906,13 +907,15 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
glm::vec2 dim = dimension;
|
||||
|
||||
auto device = m_engine->GetDevice();
|
||||
auto renderer = device->GetUIRenderer();
|
||||
|
||||
dp = 0.5f/256.0f;
|
||||
|
||||
if ( icon == 0 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 64.0f/256.0f; // dark blue transparent
|
||||
uv1.y = 64.0f/256.0f;
|
||||
uv2.x = 128.0f/256.0f;
|
||||
|
@ -927,8 +930,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 1 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 128.0f/256.0f; // white tooltip
|
||||
uv1.y = 0.0f/256.0f;
|
||||
uv2.x = 224.0f/256.0f;
|
||||
|
@ -941,8 +945,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 2 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 128.0f/256.0f; // yellow
|
||||
uv1.y = 16.0f/256.0f;
|
||||
uv2.x = 224.0f/256.0f;
|
||||
|
@ -955,8 +960,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 3 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
uv1.x = 0.0f/256.0f; // transparent blue bar with yellow upper
|
||||
uv1.y = 64.0f/256.0f;
|
||||
uv2.x = 64.0f/256.0f;
|
||||
|
@ -974,8 +980,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
dim.x += 100.0f/640.0f;
|
||||
dim.y += 60.0f/480.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/object/human.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/human.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 140.0f/256.0f;
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 182.0f/256.0f;
|
||||
|
@ -991,8 +998,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
dim.x -= 20.0f/640.0f;
|
||||
dim.y += 0.0f/480.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::WHITE);
|
||||
uv1.x = 192.0f/256.0f;
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 224.0f/256.0f;
|
||||
|
@ -1010,8 +1018,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
dim.x -= 20.0f/640.0f;
|
||||
dim.y -= 20.0f/480.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f/256.0f;
|
||||
uv1.y = 0.0f/256.0f;
|
||||
uv2.x = 96.0f/256.0f;
|
||||
|
@ -1046,7 +1055,8 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
dim.x -= 20.0f/640.0f;
|
||||
dim.y -= 20.0f/480.0f;
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button3.png");
|
||||
texture = m_engine->LoadTexture("textures/interface/button3.png");
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 0.0f/256.0f;
|
||||
uv1.y = 224.0f/256.0f;
|
||||
uv2.x = 32.0f/256.0f;
|
||||
|
@ -1057,7 +1067,8 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
uv2.y -= dp;
|
||||
DrawIcon(pos, dim, uv1, uv2); // dark blue background
|
||||
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
uv1.x = 224.0f/256.0f;
|
||||
uv1.y = 224.0f/256.0f;
|
||||
uv2.x = 249.0f/256.0f;
|
||||
|
@ -1129,8 +1140,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 5 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
uv1.x = 64.0f/256.0f; // transparent green
|
||||
uv1.y = 160.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -1143,8 +1155,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 6 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
uv1.x = 64.0f/256.0f; // transparent red
|
||||
uv1.y = 176.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -1157,8 +1170,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 7 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
uv1.x = 64.0f/256.0f; // transparent blue
|
||||
uv1.y = 192.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -1171,8 +1185,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 8 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 0.0f/256.0f; // opaque orange
|
||||
uv1.y = 0.0f/256.0f;
|
||||
uv2.x = 32.0f/256.0f;
|
||||
|
@ -1187,8 +1202,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 9 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 32.0f/256.0f; // opaque gray
|
||||
uv1.y = 32.0f/256.0f;
|
||||
uv2.x = 64.0f/256.0f;
|
||||
|
@ -1207,8 +1223,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 11 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_BLACK);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::BLACK);
|
||||
uv1.x = 64.0f/256.0f; // transparent yellow
|
||||
uv1.y = 224.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -1221,8 +1238,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 12 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 128.0f/256.0f; // dirty opaque gray
|
||||
uv1.y = 128.0f/256.0f;
|
||||
uv2.x = 160.0f/256.0f;
|
||||
|
@ -1237,8 +1255,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 13 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 192.0f/256.0f; // dirty opaque blue
|
||||
uv1.y = 128.0f/256.0f;
|
||||
uv2.x = 224.0f/256.0f;
|
||||
|
@ -1253,8 +1272,9 @@ void CWindow::DrawVertex(const glm::vec2& position, const glm::vec2& dimension,
|
|||
}
|
||||
else if ( icon == 14 )
|
||||
{
|
||||
m_engine->SetUITexture("textures/interface/button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button1.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 160.0f/256.0f; // dirty opaque red
|
||||
uv1.y = 128.0f/256.0f;
|
||||
uv2.x = 192.0f/256.0f;
|
||||
|
@ -1278,10 +1298,12 @@ void CWindow::DrawHach(const glm::vec2& pos, const glm::vec2& dim)
|
|||
bool bStop;
|
||||
|
||||
auto device = m_engine->GetDevice();
|
||||
auto renderer = device->GetUIRenderer();
|
||||
|
||||
dp = 0.5f/256.0f;
|
||||
m_engine->SetUITexture("textures/interface/button2.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
auto texture = m_engine->LoadTexture("textures/interface/button2.png");
|
||||
renderer->SetTexture(texture);
|
||||
renderer->SetTransparency(Gfx::TransparencyMode::NONE);
|
||||
uv1.x = 64.0f/256.0f; // hatching
|
||||
uv1.y = 208.0f/256.0f;
|
||||
uv2.x = 145.0f/256.0f;
|
||||
|
|
|
@ -156,7 +156,7 @@ void CMainUserInterface::ChangePhase(Phase phase)
|
|||
{
|
||||
m_main->GetCamera()->SetType(Gfx::CAM_TYPE_NULL);
|
||||
m_engine->SetOverFront(false);
|
||||
m_engine->SetOverColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f), Gfx::ENG_RSTATE_TCOLOR_BLACK); // TODO: color ok?
|
||||
m_engine->SetOverColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f), Gfx::TransparencyMode::BLACK); // TODO: color ok?
|
||||
|
||||
m_phase = phase; // copy the info from CRobotMain
|
||||
|
||||
|
|
|
@ -58,9 +58,9 @@ void CScreenWelcome::CreateInterface()
|
|||
m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5);
|
||||
|
||||
if ( m_imageIndex == 0 )
|
||||
m_engine->SetOverColor(Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f), Gfx::ENG_RSTATE_TCOLOR_BLACK);
|
||||
m_engine->SetOverColor(Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f), Gfx::TransparencyMode::BLACK);
|
||||
else
|
||||
m_engine->SetOverColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f), Gfx::ENG_RSTATE_TCOLOR_WHITE);
|
||||
m_engine->SetOverColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f), Gfx::TransparencyMode::WHITE);
|
||||
m_engine->SetOverFront(true);
|
||||
|
||||
SetBackground("textures/interface/intro"+StrUtils::ToString<int>(m_imageIndex+1)+".png", true);
|
||||
|
@ -96,11 +96,11 @@ bool CScreenWelcome::EventProcess(const Event &event)
|
|||
if ( intensity > 1.0f ) intensity = 1.0f;
|
||||
|
||||
// white first, others -> black fading
|
||||
int mode = Gfx::ENG_RSTATE_TCOLOR_WHITE;
|
||||
Gfx::TransparencyMode mode = Gfx::TransparencyMode::WHITE;
|
||||
if ((m_imageIndex == 0) && (m_time < WELCOME_LENGTH/2.0f))
|
||||
{
|
||||
intensity = 1.0f - intensity;
|
||||
mode = Gfx::ENG_RSTATE_TCOLOR_BLACK;
|
||||
mode = Gfx::TransparencyMode::BLACK;
|
||||
}
|
||||
|
||||
m_engine->SetOverColor(Gfx::Color(intensity, intensity, intensity, intensity), mode);
|
||||
|
|
Loading…
Reference in New Issue