PLAYGROUND3D: Added minimal fog test for tinygl renderer.

This commit is contained in:
Paweł Kołodziejski 2022-06-05 21:01:04 +02:00
parent d0f8d3c487
commit af899c07bf
No known key found for this signature in database
GPG key ID: 0BDADC9E74440FF7
9 changed files with 44 additions and 2 deletions

View file

@ -69,6 +69,8 @@ public:
virtual void drawInViewport() = 0;
virtual void drawRgbaTexture() = 0;
virtual void enableFog(const Math::Vector4d &fogColor) = 0;
protected:
OSystem *_system;

View file

@ -149,6 +149,16 @@ void OpenGLRenderer::setupViewport(int x, int y, int width, int height) {
glViewport(x, y, width, height);
}
void OpenGLRenderer::enableFog(const Math::Vector4d &fogColor) {
glFogi(GL_FOG_MODE, GL_EXP);
glFogf(GL_FOG_START, 1.0f);
glFogf(GL_FOG_END, 1.0f);
glFogf(GL_FOG_DENSITY, 0.1f);
GLfloat color[4] = { fogColor.x(), fogColor.y(), fogColor.z(), fogColor.w() };
glFogfv(GL_FOG_COLOR, color);
glEnable(GL_FOG);
}
void OpenGLRenderer::drawFace(uint face) {
glBegin(GL_TRIANGLE_STRIP);
for (uint i = 0; i < 4; i++) {

View file

@ -55,6 +55,8 @@ public:
void drawInViewport() override;
void drawRgbaTexture() override;
void enableFog(const Math::Vector4d &fogColor) override;
private:
Math::Vector3d _pos;
GLuint _textureRgbaId[5];

View file

@ -168,6 +168,9 @@ void ShaderRenderer::setupViewport(int x, int y, int width, int height) {
glViewport(x, y, width, height);
}
void ShaderRenderer::enableFog(const Math::Vector4d &fogColor) {
}
void ShaderRenderer::drawCube(const Math::Vector3d &pos, const Math::Vector3d &roll) {
auto rotateMatrix = (Math::Quaternion::fromEuler(roll.x(), roll.y(), roll.z(), Math::EO_XYZ)).inverse().toMatrix();
_cubeShader->use();

View file

@ -55,6 +55,8 @@ public:
void drawInViewport() override;
void drawRgbaTexture() override;
void enableFog(const Math::Vector4d &fogColor) override;
private:
OpenGL::ShaderGL *_cubeShader;
OpenGL::ShaderGL *_fadeShader;

View file

@ -177,6 +177,16 @@ void TinyGLRenderer::setupViewport(int x, int y, int width, int height) {
tglViewport(x, y, width, height);
}
void TinyGLRenderer::enableFog(const Math::Vector4d &fogColor) {
tglFogi(TGL_FOG_MODE, TGL_EXP);
tglFogf(TGL_FOG_START, 1.0f);
tglFogf(TGL_FOG_END, 1.0f);
tglFogf(TGL_FOG_DENSITY, 0.1f);
TGLfloat color[4] = { fogColor.x(), fogColor.y(), fogColor.z(), fogColor.w() };
tglFogfv(TGL_FOG_COLOR, color);
tglEnable(TGL_FOG);
}
void TinyGLRenderer::drawFace(uint face) {
tglBegin(TGL_TRIANGLE_STRIP);
for (uint i = 0; i < 4; i++) {

View file

@ -55,6 +55,8 @@ public:
void drawInViewport() override;
void drawRgbaTexture() override;
void enableFog(const Math::Vector4d &fogColor) override;
void flipBuffer() override;
private:

View file

@ -55,8 +55,9 @@ bool Playground3dEngine::hasFeature(EngineFeature f) const {
Playground3dEngine::Playground3dEngine(OSystem *syst)
: Engine(syst), _system(syst), _gfx(nullptr), _frameLimiter(nullptr),
_rotateAngleX(0), _rotateAngleY(0), _rotateAngleZ(0),
_clearColor(0.0f, 0.0f, 0.0f, 1.0f), _fade(1.0f), _fadeIn(false),
_rotateAngleX(0), _rotateAngleY(0), _rotateAngleZ(0), _fogEnable(false),
_clearColor(0.0f, 0.0f, 0.0f, 1.0f), _fogColor(0.0f, 0.0f, 0.0f, 1.0f),
_fade(1.0f), _fadeIn(false),
_rgbaTexture(nullptr), _rgbTexture(nullptr), _rgb565Texture(nullptr),
_rgba5551Texture(nullptr), _rgba4444Texture(nullptr) {
}
@ -80,6 +81,11 @@ Common::Error Playground3dEngine::run() {
// 4 - moving filled rectangle in viewport
// 5 - drawing RGBA pattern texture to check endian correctness
int testId = 1;
_fogEnable = false;
if (_fogEnable) {
_fogColor = Math::Vector4d(1.0f, 1.0f, 1.0f, 1.0f);
}
switch (testId) {
case 1:
@ -224,6 +230,9 @@ void Playground3dEngine::drawFrame(int testId) {
switch (testId) {
case 1:
if (_fogEnable) {
_gfx->enableFog(_fogColor);
}
drawAndRotateCube();
break;
case 2:

View file

@ -50,8 +50,10 @@ private:
Renderer *_gfx;
Graphics::FrameLimiter *_frameLimiter;
Math::Vector4d _clearColor;
Math::Vector4d _fogColor;
float _fade;
bool _fadeIn;
bool _fogEnable;
Graphics::Surface *_rgbaTexture;
Graphics::Surface *_rgbTexture;
Graphics::Surface *_rgb565Texture;