Deferred rendering engine
parent
6b99bbd9a0
commit
d500fe65c4
|
@ -11,7 +11,10 @@ in vec3 normal;
|
|||
uniform sampler2D tex;
|
||||
|
||||
void main() {
|
||||
vec4 spec = texture(tex, texCoords);
|
||||
if (spec.a < 0.1) discard;
|
||||
|
||||
gPosition = vec4(fragPos, 1);
|
||||
gNormal = vec4(normalize(normal), 1);
|
||||
gSpecular = texture(tex, texCoords);
|
||||
gSpecular = spec;
|
||||
}
|
|
@ -14,11 +14,11 @@ out vec3 fragPos;
|
|||
out vec3 normal;
|
||||
|
||||
void main() {
|
||||
vec4 worldPos = model * vec4(aPos, 1.0);
|
||||
vec4 modelViewPos = view * model * vec4(aPos, 1.0);
|
||||
|
||||
fragPos = worldPos.xyz;
|
||||
fragPos = modelViewPos.xyz;
|
||||
texCoords = aTexCoords.xy;
|
||||
normal = transpose(inverse(mat3(model))) * aNormal;
|
||||
|
||||
gl_Position = projection * view * worldPos;
|
||||
gl_Position = projection * modelViewPos;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#version 330 core
|
||||
|
||||
out vec4 fragColor;
|
||||
#define NEAR_FOG vec3(0.40, 0.56, 0.72)
|
||||
#define FAR_FOG vec3(0.58, 0.76, 0.94)
|
||||
|
||||
out vec4 outColor;
|
||||
|
||||
in vec2 texCoords;
|
||||
|
||||
|
@ -13,5 +16,14 @@ void main() {
|
|||
vec3 normal = texture(gNormal, texCoords).rgb;
|
||||
vec3 color = texture(gColorSpec, texCoords).rgb;
|
||||
|
||||
fragColor = vec4(normal, 1.0);
|
||||
float shading = (0.8 + abs(normal.x) * 0.15) + (normal.y * 0.15) + 0.2;
|
||||
float dist = distance(vec3(0, 0, 0), vec3(fragPos));
|
||||
|
||||
float nearFog = min(max(dist - 200, 0) / 100, 1);
|
||||
float farFog = min(max(dist - 250, 0) / 100, 1);
|
||||
|
||||
vec3 fragColor = color * vec3(shading);
|
||||
vec3 shadedColor = mix(mix(vec3(fragColor), NEAR_FOG, nearFog), FAR_FOG, farFog);
|
||||
|
||||
outColor = vec4(shadedColor, 1);
|
||||
}
|
|
@ -21,7 +21,6 @@ Renderer::Renderer(GLint winWidth, GLint winHeight) :
|
|||
|
||||
glEnable(GL_CULL_FACE);
|
||||
glEnable(GL_BLEND);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
|
@ -114,8 +113,11 @@ void Renderer::update() {
|
|||
}
|
||||
|
||||
void Renderer::beginWorldDrawCalls() {
|
||||
activeTexture = nullptr;
|
||||
|
||||
glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
@ -149,22 +151,21 @@ void Renderer::endWorldDrawCalls() {
|
|||
0, 0, static_cast<int>(winSize.x), static_cast<int>(winSize.y),
|
||||
GL_DEPTH_BUFFER_BIT, GL_NEAREST);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
void Renderer::beginGUIDrawCalls() {
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
guiShader.use();
|
||||
glUniformMatrix4fv(gu.ortho, 1, GL_FALSE, glm::value_ptr(gu.matrix));
|
||||
}
|
||||
|
||||
void Renderer::swapBuffers() {
|
||||
Shader::clearShader();
|
||||
window.swapBuffers();
|
||||
}
|
||||
|
||||
//void Renderer::beginGUI() {
|
||||
// glClear(GL_DEPTH_BUFFER_BIT);
|
||||
// glDisable(GL_DEPTH_TEST);
|
||||
// enableGuiShader();
|
||||
//}
|
||||
//
|
||||
//void Renderer::end() {
|
||||
// Shader::clearShader();
|
||||
// window.swapBuffers();
|
||||
//}
|
||||
|
||||
Window *Renderer::getWindow() {
|
||||
return &window;
|
||||
}
|
||||
|
@ -173,13 +174,6 @@ Camera *Renderer::getCamera() {
|
|||
return &camera;
|
||||
}
|
||||
|
||||
//void Renderer::enableGuiShader() {
|
||||
// guiShader.use();
|
||||
// mode = true;
|
||||
//
|
||||
// glUniformMatrix4fv(gu.ortho, 1, GL_FALSE, glm::value_ptr(gu.matrix));
|
||||
//}
|
||||
|
||||
void Renderer::renderQuad() {
|
||||
if (quadVAO == 0) {
|
||||
float quadVertices[] = {
|
||||
|
|
|
@ -26,9 +26,8 @@ public:
|
|||
|
||||
void beginWorldDrawCalls();
|
||||
void endWorldDrawCalls();
|
||||
|
||||
// void beginGUI();
|
||||
// void end();
|
||||
void beginGUIDrawCalls();
|
||||
void swapBuffers();
|
||||
|
||||
void setModelMatrix(glm::mat4& modelMatrix);
|
||||
void enableTexture(Texture* texture);
|
||||
|
@ -40,7 +39,6 @@ public:
|
|||
|
||||
bool resized;
|
||||
private:
|
||||
// void enableGuiShader();
|
||||
void renderQuad();
|
||||
|
||||
unsigned int quadVAO = 0, quadVBO;
|
||||
|
@ -51,8 +49,8 @@ private:
|
|||
unsigned int gBuffer;
|
||||
unsigned int gPosition, gNormal, gColorSpec;
|
||||
|
||||
// glm::vec4 clearColor {0.58f, 0.76f, 0.94f, 1.0f};
|
||||
glm::vec4 clearColor {0.0f, 0.0f, 0.0f, 1.0f};
|
||||
// glm::vec4 clearColor {0.0f, 0.0f, 0.0f, 1.0f};
|
||||
glm::vec4 clearColor {0.58f, 0.76f, 0.94f, 1.0f};
|
||||
Texture* activeTexture;
|
||||
|
||||
Shader worldGeometryShader;
|
||||
|
|
|
@ -65,25 +65,18 @@ void GameScene::draw() {
|
|||
auto &renderer = *state->renderer;
|
||||
auto &camera = *renderer.getCamera();
|
||||
|
||||
drawCalls = 0;
|
||||
|
||||
renderer.beginWorldDrawCalls();
|
||||
|
||||
renderer.enableTexture(&defs.textures().getAtlasTexture());
|
||||
|
||||
drawCalls = world.render(renderer);
|
||||
|
||||
for (auto entity : entities) entity->draw(renderer);
|
||||
|
||||
renderer.endWorldDrawCalls();
|
||||
renderer.beginGUIDrawCalls();
|
||||
|
||||
// state->renderer->beginGUI();
|
||||
//
|
||||
// for (auto entity : gui) {
|
||||
// entity->draw(renderer);
|
||||
// }
|
||||
//
|
||||
// state->renderer->end();
|
||||
for (auto entity : gui) entity->draw(renderer);
|
||||
|
||||
renderer.swapBuffers();
|
||||
}
|
||||
|
||||
void GameScene::cleanup() {
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
|
||||
class ServerPlayer {
|
||||
public:
|
||||
const static int ACTIVE_RANGE_H = 16;
|
||||
const static int ACTIVE_RANGE_V = 8;
|
||||
const static int ACTIVE_RANGE_H = 24;
|
||||
const static int ACTIVE_RANGE_V = 12;
|
||||
|
||||
explicit ServerPlayer(ServerPeer* peer, std::string uuid, std::string username);
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ void Dimension::update() {
|
|||
float distance = max(abs(diffVec.x), max(abs(diffVec.y), abs(diffVec.z)));
|
||||
|
||||
//TODO: Don't hard code this number
|
||||
if (distance > 30) {
|
||||
if (distance > 24) {
|
||||
if (chunk->meshChunk != nullptr) {
|
||||
meshChunks.erase(chunk->meshChunkIter);
|
||||
delete chunk->meshChunk;
|
||||
|
|
Loading…
Reference in New Issue