4 #ifdef entry_point_testing
7 #include <GLFW\glfw3.h>
10 #include <glm\gtc\matrix_transform.hpp>
11 #include <glm\gtc\type_ptr.hpp>
16 #include "GBuffer.hpp"
19 #include "Texture.hpp"
20 #include "GradientMap.hpp"
21 #include "SSAOKernel.hpp"
22 #include "tar_config.hpp"
24 std::string m_game_path
= "D:/SteamLibrary/steamapps/common/Counter-Strike Global Offensive/csgo";
26 void render_config(tar_config_layer layer
);
28 glm::mat4 g_mat4_viewm
;
29 glm::mat4 g_mat4_projm
;
31 Shader
* g_shader_gBuffer
;
32 Shader
* g_shader_iBuffer
;
33 Shader
* g_shader_comp
;
36 GBuffer
* g_gbuffer_clean
;
37 MBuffer
* g_mask_playspace
;
38 MBuffer
* g_mask_buyzone
;
39 MBuffer
* g_mask_objectives
;
42 tar_config
* g_tar_config
;
43 BoundingBox g_vmf_info_bounds
;
45 Mesh
* g_mesh_screen_quad
;
46 Texture
* g_texture_background
;
47 Texture
* g_texture_modulate
;
48 std::vector
<glm::vec3
> g_ssao_samples
;
49 Texture
* g_ssao_rotations
;
52 #pragma region opengl_setup
54 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR
, 3);
55 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR
, 3);
56 glfwWindowHint(GLFW_OPENGL_PROFILE
, GLFW_OPENGL_CORE_PROFILE
);
57 glfwWindowHint(GLFW_RESIZABLE
, GL_FALSE
);
59 //glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
61 GLFWwindow
* window
= glfwCreateWindow(1024, 1024, "Ceci n'est pas une window", NULL
, NULL
);
64 printf("GLFW died\n");
69 glfwMakeContextCurrent(window
);
72 if (!gladLoadGLLoader((GLADloadproc
)glfwGetProcAddress
)) {
73 printf("GLAD died\n");
77 const unsigned char* glver
= glGetString(GL_VERSION
);
78 printf("(required: min core 3.3.0) opengl version: %s\n", glver
);
81 vfilesys
* filesys
= new vfilesys(m_game_path
+ "/gameinfo.txt");
83 vmf::LinkVFileSystem(filesys
);
84 g_vmf_file
= vmf::from_file("sample_stuff/de_tavr_test.vmf");
85 g_vmf_file
->InitModelDict();
86 g_tar_config
= new tar_config(g_vmf_file
);
87 g_vmf_info_bounds
= g_vmf_file
->getVisgroupBounds(g_tar_config
->m_visgroup_layout
);
89 #pragma region opengl_extra
91 std::vector
<float> __meshData
= {
99 g_mesh_screen_quad
= new Mesh(__meshData
, MeshMode::SCREEN_SPACE_UV
);
102 g_shader_gBuffer
= new Shader("shaders/gBuffer.vs", "shaders/gBuffer.fs");
103 g_shader_iBuffer
= new Shader("shaders/gBuffer.vs", "shaders/iBuffer.fs");
104 g_shader_comp
= new Shader("shaders/fullscreenbase.vs", "shaders/fullscreenbase.fs");
106 // Set up draw buffers
107 g_mask_playspace
= new MBuffer(1024, 1024);
108 g_mask_objectives
= new MBuffer(1024, 1024);
109 g_mask_buyzone
= new MBuffer(1024, 1024);
110 g_gbuffer
= new GBuffer(1024, 1024);
111 g_gbuffer_clean
= new GBuffer(1024, 1024);
113 // Setup camera projection matrices
114 g_mat4_projm
= glm::ortho(-2000.0f
, 2000.0f
, -2000.0f
, 2000.0f
, -1024.0f
, 1024.0f
);
115 g_mat4_viewm
= glm::lookAt(glm::vec3(0, 0, 0), glm::vec3(0.0f
, -1.0f
, 0.0f
), glm::vec3(0, 0, 1));
118 g_texture_background
= g_tar_config
->m_texture_background
;//new Texture("textures/grid.png");
119 g_texture_modulate
= new Texture("textures/modulate.png");
120 g_ssao_samples
= get_ssao_samples(256);
121 g_ssao_rotations
= new ssao_rotations_texture();
123 glEnable(GL_DEPTH_TEST
);
124 glPolygonMode(GL_FRONT_AND_BACK
, GL_FILL
);
127 std::vector
<entity
*> configs
= g_vmf_file
->get_entities_by_classname("tar_config");
131 while (!glfwWindowShouldClose(window
)) {
134 render_config(tar_config_layer());
136 glfwSwapBuffers(window
);
146 void render_config(tar_config_layer layer
) {
147 // G BUFFER GENERATION ======================================================================================
148 #pragma region buffer_gen_geo
152 glClearColor(0.0, 0.0, 0.0, 1.0);
153 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
154 glPolygonMode(GL_FRONT_AND_BACK
, GL_FILL
);
155 glEnable(GL_CULL_FACE
);
158 g_shader_gBuffer
->use();
159 g_shader_gBuffer
->setMatrix("projection", g_mat4_projm
);
160 g_shader_gBuffer
->setMatrix("view", g_mat4_viewm
);
162 glm::mat4 model
= glm::mat4();
163 g_shader_gBuffer
->setMatrix("model", model
);
166 g_vmf_file
->SetFilters({}, { "func_detail", "prop_static" });
167 g_vmf_file
->DrawWorld(g_shader_gBuffer
);
168 g_vmf_file
->DrawEntities(g_shader_gBuffer
);
171 glClear(GL_DEPTH_BUFFER_BIT
);
173 // Render again BUT JUST THE IMPORTANT BITS
174 g_vmf_file
->SetFilters({ g_tar_config
->m_visgroup_layout
, g_tar_config
->m_visgroup_mask
}, { "func_detail", "prop_static" });
175 g_vmf_file
->DrawWorld(g_shader_gBuffer
);
176 g_vmf_file
->DrawEntities(g_shader_gBuffer
);
178 g_vmf_file
->SetFilters({ g_tar_config
->m_visgroup_overlap
}, { "func_detail", "prop_static" });
179 g_vmf_file
->DrawWorld(g_shader_gBuffer
, {}, TAR_MIBUFFER_OVERLAP
);
180 g_vmf_file
->DrawEntities(g_shader_gBuffer
, {}, TAR_MIBUFFER_OVERLAP
);
182 // Draw cover with cover flag set
183 g_vmf_file
->SetFilters({ g_tar_config
->m_visgroup_cover
}, { "func_detail", "prop_static" });
184 g_vmf_file
->DrawWorld(g_shader_gBuffer
, {}, TAR_MIBUFFER_COVER0
);
185 g_vmf_file
->DrawEntities(g_shader_gBuffer
, {}, TAR_MIBUFFER_COVER0
);
189 g_gbuffer_clean
->Bind();
190 glClearColor(0.0, 0.0, 0.0, 1.0);
191 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
193 g_vmf_file
->SetFilters({ g_tar_config
->m_visgroup_layout
, g_tar_config
->m_visgroup_mask
}, { "func_detail", "prop_static" });
194 g_vmf_file
->DrawWorld(g_shader_gBuffer
);
195 g_vmf_file
->DrawEntities(g_shader_gBuffer
);
201 #pragma region mask_gen
203 g_mask_playspace
->Bind();
204 glClearColor(0.0, 0.0, 0.0, 1.0);
205 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
207 g_shader_iBuffer
->use();
208 g_shader_iBuffer
->setMatrix("projection", g_mat4_projm
);
209 g_shader_iBuffer
->setMatrix("view", g_mat4_viewm
);
211 // LAYOUT ================================================================
213 g_shader_iBuffer
->setUnsigned("srcChr", 0x1U
);
214 g_vmf_file
->SetFilters({ g_tar_config
->m_visgroup_layout
}, { "func_detail", "prop_static" });
215 g_vmf_file
->DrawWorld(g_shader_iBuffer
);
216 g_vmf_file
->DrawEntities(g_shader_iBuffer
);
218 // Subtractive brushes
219 g_shader_iBuffer
->setUnsigned("srcChr", 0x0U
);
220 g_vmf_file
->SetFilters({ g_tar_config
->m_visgroup_mask
}, { "func_detail", "prop_static" });
221 g_vmf_file
->DrawWorld(g_shader_iBuffer
);
222 g_vmf_file
->DrawEntities(g_shader_iBuffer
);
224 // OBJECTIVES ============================================================
226 g_mask_objectives
->Bind();
227 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
229 g_shader_iBuffer
->setUnsigned("srcChr", 0x1U
);
230 g_vmf_file
->SetFilters({}, { "func_bomb_target", "func_hostage_rescue" });
231 g_vmf_file
->DrawEntities(g_shader_iBuffer
);
233 // BUY ZONES =============================================================
235 g_mask_buyzone
->Bind();
236 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
238 g_shader_iBuffer
->setUnsigned("srcChr", 0x1U
);
239 g_vmf_file
->SetFilters({}, { "func_buyzone" });
240 g_vmf_file
->DrawEntities(g_shader_iBuffer
);
244 // FINAL COMPOSITE ===============================================================
245 #pragma region final_composite
247 MBuffer::Unbind(); // Release any frame buffer
249 glClearColor(0.0, 0.0, 0.0, 1.0);
250 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
251 glPolygonMode(GL_FRONT_AND_BACK
, GL_FILL
);
252 glDisable(GL_CULL_FACE
);
254 g_shader_comp
->use();
257 //g_texture_background->bindOnSlot ( 0 );
258 //g_shader_comp->setInt("tex_background", 0 );
260 g_tar_config
->m_texture_gradient
->bindOnSlot( 1 );
261 g_shader_comp
->setInt("tex_gradient", 1 );
263 g_gbuffer
->BindPositionBufferToTexSlot ( 2 );
264 g_shader_comp
->setInt("gbuffer_position", 2 );
266 g_gbuffer
->BindNormalBufferToTexSlot ( 3 );
267 g_shader_comp
->setInt("gbuffer_normal", 3 );
269 g_gbuffer
->BindInfoBufferToTexSlot ( 4 );
270 g_shader_comp
->setInt("gbuffer_info", 4 );
272 g_mask_playspace
->BindMaskBufferToTexSlot ( 5 );
273 g_shader_comp
->setInt("umask_playspace", 5 );
275 g_mask_objectives
->BindMaskBufferToTexSlot( 6 );
276 g_shader_comp
->setInt("umask_objectives", 6 );
278 g_mask_buyzone
->BindMaskBufferToTexSlot ( 7 );
279 g_shader_comp
->setInt("umask_buyzone", 7 );
281 g_gbuffer_clean
->BindPositionBufferToTexSlot(8);
282 g_shader_comp
->setInt("gbuffer_clean_position", 8);
284 g_texture_modulate
->bindOnSlot(10);
285 g_shader_comp
->setInt("tex_modulate", 10);
287 g_ssao_rotations
->bindOnSlot ( 9 );
288 g_shader_comp
->setInt("ssaoRotations", 9 );
289 g_shader_comp
->setFloat("ssaoScale", 1000.0f
);
290 g_shader_comp
->setMatrix("projection", g_mat4_projm
);
291 g_shader_comp
->setMatrix("view", g_mat4_viewm
);
293 for (int i
= 0; i
< 256; i
++) {
294 g_shader_comp
->setVec3("samples[" + std::to_string(i
) + "]", g_ssao_samples
[i
]);
298 g_shader_comp
->setVec3("bounds_NWU", g_vmf_info_bounds
.NWU
);
299 g_shader_comp
->setVec3("bounds_SEL", g_vmf_info_bounds
.SEL
);
301 g_shader_comp
->setVec4("color_objective", g_tar_config
->m_color_objective
);
302 g_shader_comp
->setVec4("color_buyzone", g_tar_config
->m_color_buyzone
);
303 g_shader_comp
->setVec4("color_cover", g_tar_config
->m_color_cover
);
304 g_shader_comp
->setVec4("color_cover2", g_tar_config
->m_color_cover2
);
306 g_mesh_screen_quad
->Draw();