diff --git a/FocusTerra/.vs/FocusTerra/v16/.suo b/FocusTerra/.vs/FocusTerra/v16/.suo index 160d73178deeeb55bb53f8d60b6f3423c11ad63f..3071d821f737f1314afea7da0fe47f1dccf121e7 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/.suo and b/FocusTerra/.vs/FocusTerra/v16/.suo differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/13073c15335d2976/DRAWING_HANDLER.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/13073c15335d2976/DRAWING_HANDLER.ipch index 84f70c2405f19d3874bc7e01b7cf83a3dd891fe8..239643c4e2519bdff74ff2a922d18180137e4959 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/13073c15335d2976/DRAWING_HANDLER.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/13073c15335d2976/DRAWING_HANDLER.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2497ca4debdda90c/SLIM_BLOCKCHAIN_HANDLER.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2497ca4debdda90c/SLIM_BLOCKCHAIN_HANDLER.ipch index dcfa507f66db01ed338689168d7803fba025919b..365263a7c92d61f6b8523123d9820f76c1597f0f 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2497ca4debdda90c/SLIM_BLOCKCHAIN_HANDLER.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2497ca4debdda90c/SLIM_BLOCKCHAIN_HANDLER.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2c9c502d131f3083/MAIN_TESTING.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2c9c502d131f3083/MAIN_TESTING.ipch new file mode 100644 index 0000000000000000000000000000000000000000..5276a65cb7165aadb0c3407befbc9b6f5c3c5630 Binary files /dev/null and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/2c9c502d131f3083/MAIN_TESTING.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/3ff180ae330f6cc6/DRAWER.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/3ff180ae330f6cc6/DRAWER.ipch index ef107c52279c62e2faa4b96004e8266605435952..90e3bafc1fb50b4c3c99d513a125871d4ad92f39 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/3ff180ae330f6cc6/DRAWER.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/3ff180ae330f6cc6/DRAWER.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/814970c2f16523d/WAVE_HANDLER.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/814970c2f16523d/WAVE_HANDLER.ipch index f15d120fc5ea292f07d2e8a133e950db020affad..08a9a66aba44c509c35fa50a6ebbc7b6b6c2aac9 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/814970c2f16523d/WAVE_HANDLER.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/814970c2f16523d/WAVE_HANDLER.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/86d3aa3212a74e48/INFRASTRUCTURE.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/86d3aa3212a74e48/INFRASTRUCTURE.ipch index fa51d59f881710aaf9233fea744d8c8e9b6935b1..a21d643fe919fcc05327764d6784086fe6142ca6 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/86d3aa3212a74e48/INFRASTRUCTURE.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/86d3aa3212a74e48/INFRASTRUCTURE.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/cb00a5d01c33728d/MAIN_TESTING.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/cb00a5d01c33728d/MAIN_TESTING.ipch index 10ff385078eda405b315961b0619593f33b56407..903edd66c758e1cdd8718fdaa73d28d7a2a2d79f 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/cb00a5d01c33728d/MAIN_TESTING.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/cb00a5d01c33728d/MAIN_TESTING.ipch differ diff --git a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/e7b221f31939c09e/EFFICIENT_BLOCK.ipch b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/e7b221f31939c09e/EFFICIENT_BLOCK.ipch index 47580869773352ac5cb3f3d137732c6369dc7682..dc3ffdb4dfa81525063ec600afb0e92096f7841e 100644 Binary files a/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/e7b221f31939c09e/EFFICIENT_BLOCK.ipch and b/FocusTerra/.vs/FocusTerra/v16/ipch/AutoPCH/e7b221f31939c09e/EFFICIENT_BLOCK.ipch differ diff --git a/FocusTerra/FocusTerra/FocusTerra.vcxproj b/FocusTerra/FocusTerra/FocusTerra.vcxproj index 52e84f698b26e441ef9767552bae7d4edb9fe2c7..fbc91051866bb831b0e2491bc8fa11018d419915 100644 --- a/FocusTerra/FocusTerra/FocusTerra.vcxproj +++ b/FocusTerra/FocusTerra/FocusTerra.vcxproj @@ -237,6 +237,8 @@ <None Include="..\..\shaders\copy_red.vert" /> <None Include="..\..\shaders\draw.frag" /> <None Include="..\..\shaders\draw.vert" /> + <None Include="..\..\shaders\draw_blocks.frag" /> + <None Include="..\..\shaders\draw_blocks.vert" /> <None Include="..\..\shaders\render2d.frag" /> <None Include="..\..\shaders\render2d.vert" /> <None Include="..\..\shaders\render3d.frag" /> diff --git a/FocusTerra/FocusTerra/FocusTerra.vcxproj.filters b/FocusTerra/FocusTerra/FocusTerra.vcxproj.filters index 03dbb48d63d4bf631c509ca39864977ff0ace3d0..e1c14ecc8819c3e56c464214051ccd14b0a5aa11 100644 --- a/FocusTerra/FocusTerra/FocusTerra.vcxproj.filters +++ b/FocusTerra/FocusTerra/FocusTerra.vcxproj.filters @@ -238,6 +238,12 @@ <None Include="..\..\resource\damp_test.conf"> <Filter>Resource Files</Filter> </None> + <None Include="..\..\shaders\draw_blocks.vert"> + <Filter>Resource Files</Filter> + </None> + <None Include="..\..\shaders\draw_blocks.frag"> + <Filter>Resource Files</Filter> + </None> </ItemGroup> <ItemGroup> <Text Include="..\..\resource\classDesign.txt"> diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.Build.CppClean.log b/FocusTerra/FocusTerra/x64/Release/FocusTerra.Build.CppClean.log new file mode 100644 index 0000000000000000000000000000000000000000..a7a36fe4bad7fc33a49e81318804157dfd20e222 --- /dev/null +++ b/FocusTerra/FocusTerra/x64/Release/FocusTerra.Build.CppClean.log @@ -0,0 +1,38 @@ +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\vc142.pdb +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\glad.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\shader.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\main.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\init.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui_widgets.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui_impl_sdl.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui_impl_opengl3.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui_draw.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui_demo.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\main_3d.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\wave_handler.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\main_refactored.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\main_testing.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\input_handler.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\infrastructure.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\gui_handler.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\blockchain_handler.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\pevent.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\block.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\toolbox.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\drawing_handler.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\drawer.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\event_logger.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\imgui_example_sdl_opengl3.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\slim_blockchain_handler.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\efficient_block.obj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\x64\release\focusterra.exe +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.ipdb +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.iobj +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\x64\release\focusterra.pdb +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.tlog\cl.command.1.tlog +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.tlog\cl.read.1.tlog +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.tlog\cl.write.1.tlog +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.tlog\link.command.1.tlog +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.tlog\link.read.1.tlog +c:\users\engel\vs_projects\focusterra\framebuffer-testing\focusterra\focusterra\x64\release\focusterra.tlog\link.write.1.tlog diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.iobj b/FocusTerra/FocusTerra/x64/Release/FocusTerra.iobj index 49a4ca1caf201823d9cb32cfc753b28738a2e754..b6eb842ea492238961052f03be77ac5188ba66c8 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.iobj and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.iobj differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.ipdb b/FocusTerra/FocusTerra/x64/Release/FocusTerra.ipdb index 16a3c271aa4d25ea5a203a4825cd94ec54f54789..5f4c1aa50444e7fab5cc44d7d27bdd07283759c2 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.ipdb and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.ipdb differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.log b/FocusTerra/FocusTerra/x64/Release/FocusTerra.log index 0f3b073d50ab240e5614072f1c476ac2adb1cb69..01bea05a82735b5b9ae096d9df7553a754dc6d91 100644 --- a/FocusTerra/FocusTerra/x64/Release/FocusTerra.log +++ b/FocusTerra/FocusTerra/x64/Release/FocusTerra.log @@ -1,8 +1,96 @@ - block.cpp + slim_blockchain_handler.cpp +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(146,40): warning C4267: 'argument': conversion from 'size_t' to 'GLint', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(161,40): warning C4267: 'argument': conversion from 'size_t' to 'GLint', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(167,40): warning C4267: 'argument': conversion from 'size_t' to 'GLint', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(182,40): warning C4267: 'argument': conversion from 'size_t' to 'GLint', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(188,40): warning C4267: 'argument': conversion from 'size_t' to 'GLint', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(246,16): warning C4244: 'initializing': conversion from 'int' to 'float', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(247,59): warning C4244: 'argument': conversion from 'float' to 'int', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(247,56): warning C4244: 'argument': conversion from 'float' to 'int', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(267,16): warning C4244: 'initializing': conversion from 'int' to 'float', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(268,59): warning C4244: 'argument': conversion from 'float' to 'int', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(268,56): warning C4244: 'argument': conversion from 'float' to 'int', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(275,17): warning C4244: 'initializing': conversion from 'const int' to 'float', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(276,18): warning C4244: 'initializing': conversion from 'const int' to 'float', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(284,11): warning C4244: 'initializing': conversion from 'int' to 'float', possible loss of data +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(285,11): warning C4244: 'initializing': conversion from 'const T' to 'float', possible loss of data + with + [ + T=glm::i32 + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(286,11): warning C4244: 'initializing': conversion from 'T' to 'float', possible loss of data + with + [ + T=glm::i32 + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(287,11): warning C4244: 'initializing': conversion from 'const T' to 'float', possible loss of data + with + [ + T=glm::i32 + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(289,42): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(290,43): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(294,46): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(295,47): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(299,46): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(300,43): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(304,42): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(305,43): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(309,46): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(310,47): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(314,42): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] +C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\slim_blockchain_handler.cpp(315,47): warning C4244: 'argument': conversion from 'double' to '_Ty', possible loss of data + with + [ + _Ty=float + ] Generating code -C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\src\main_testing.cpp(104): warning C4715: 'SDL_main': not all control paths return a value - 9 of 2120 functions ( 0.4%) were compiled, the rest were copied from previous compilation. + 2 of 2212 functions (<0.1%) were compiled, the rest were copied from previous compilation. 0 functions were new in current compilation - 22 functions had inline decision re-evaluated but remain unchanged + 23 functions had inline decision re-evaluated but remain unchanged Finished generating code FocusTerra.vcxproj -> C:\Users\engel\VS_Projects\FocusTerra\framebuffer-testing\FocusTerra\x64\Release\FocusTerra.exe diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.command.1.tlog b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.command.1.tlog index db04f725f81a6ea3c060c158b838a3e5faa60200..02fbb17783a6fff9c9fd36cd0d145dc2a4f44a37 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.command.1.tlog and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.command.1.tlog differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.read.1.tlog b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.read.1.tlog index 217750b72a3067993aa771a8e1cd35d63d4741bc..17b47dbbeb5026e8016ebea879e358c7d6d8882f 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.read.1.tlog and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.read.1.tlog differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.write.1.tlog b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.write.1.tlog index 14585667aa7dc606783ec8de16d50c123e308c61..1c5e5c11ee5e3738c740f990220f3e6c41c602f3 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.write.1.tlog and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/CL.write.1.tlog differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.command.1.tlog b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.command.1.tlog index 06f33998edf5afd5928fb69f3eb27e5aec5dc434..1a2742ba34faf8bf40bcd668bb1ba03225d980b2 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.command.1.tlog and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.command.1.tlog differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.read.1.tlog b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.read.1.tlog index 157ec7f83d88ad3b3f9eaf04c488926c500208a3..2cd31494dadf74d19db32eb70f85c6443501b23f 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.read.1.tlog and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.read.1.tlog differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.write.1.tlog b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.write.1.tlog index 23313101401cc1ee226fc009ac014ac91c7229b3..161ca65f0408be56139d39cad22ef1d94a307b50 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.write.1.tlog and b/FocusTerra/FocusTerra/x64/Release/FocusTerra.tlog/link.write.1.tlog differ diff --git a/FocusTerra/FocusTerra/x64/Release/FocusTerra.vcxproj.FileListAbsolute.txt b/FocusTerra/FocusTerra/x64/Release/FocusTerra.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/FocusTerra/FocusTerra/x64/Release/block.obj b/FocusTerra/FocusTerra/x64/Release/block.obj deleted file mode 100644 index 79d3aab8fe8996119f00cdf9d3d1a112bb58d51d..0000000000000000000000000000000000000000 Binary files a/FocusTerra/FocusTerra/x64/Release/block.obj and /dev/null differ diff --git a/FocusTerra/FocusTerra/x64/Release/blockchain_handler.obj b/FocusTerra/FocusTerra/x64/Release/blockchain_handler.obj deleted file mode 100644 index 611c99f874aae3874b81ef0be0b8f073885b661c..0000000000000000000000000000000000000000 Binary files a/FocusTerra/FocusTerra/x64/Release/blockchain_handler.obj and /dev/null differ diff --git a/FocusTerra/FocusTerra/x64/Release/drawer.obj b/FocusTerra/FocusTerra/x64/Release/drawer.obj index be390687af97af06cf9601305d1a31e70c85fac7..ed7e9bdec214765b3fa6e30835631ace8395b39d 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/drawer.obj and b/FocusTerra/FocusTerra/x64/Release/drawer.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/drawing_handler.obj b/FocusTerra/FocusTerra/x64/Release/drawing_handler.obj index aeacb8e69b66c2b8caec4cd3d410092f2ddf1a46..43b1942bdf9c1c5dea438176f03da3d127e39683 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/drawing_handler.obj and b/FocusTerra/FocusTerra/x64/Release/drawing_handler.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/efficient_block.obj b/FocusTerra/FocusTerra/x64/Release/efficient_block.obj new file mode 100644 index 0000000000000000000000000000000000000000..ab2e02ff86e403b5e969647887bf37d2ddcdaa4f Binary files /dev/null and b/FocusTerra/FocusTerra/x64/Release/efficient_block.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/event_logger.obj b/FocusTerra/FocusTerra/x64/Release/event_logger.obj index bc5bc8f320d40dd5f87a580972072a9bb6e45c89..777d2fd426e8bed7610e7a5646cf773c11a923c0 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/event_logger.obj and b/FocusTerra/FocusTerra/x64/Release/event_logger.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/glad.obj b/FocusTerra/FocusTerra/x64/Release/glad.obj index de6111f6987a5ca7d37d4a0d4810642927386043..98a4a0ddf1c923638cd97b340047e0e327b9c891 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/glad.obj and b/FocusTerra/FocusTerra/x64/Release/glad.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/gui_handler.obj b/FocusTerra/FocusTerra/x64/Release/gui_handler.obj index cdaa55227fad4d928bbfe106c52ffb93316c5993..bc2056481f0e4978f91f523790101764a97ba692 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/gui_handler.obj and b/FocusTerra/FocusTerra/x64/Release/gui_handler.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui.obj b/FocusTerra/FocusTerra/x64/Release/imgui.obj index 025a4cf0c97dac56625446f8ed93fb1767cbdfed..a592d41a4460e3c1d9ecf4fc48065c2c96522c71 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui.obj and b/FocusTerra/FocusTerra/x64/Release/imgui.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui_demo.obj b/FocusTerra/FocusTerra/x64/Release/imgui_demo.obj index da919fbd69559647b8ce30fcb015d56f85f24ec8..ddaf7ca4958713b293d61db3550f53ae1e2f12cb 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui_demo.obj and b/FocusTerra/FocusTerra/x64/Release/imgui_demo.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui_draw.obj b/FocusTerra/FocusTerra/x64/Release/imgui_draw.obj index a9d89a6d9bcf993ed070cf1c8d5c188d4ddaf11f..442a03895e626ca7c171f75a4033ab9508754aab 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui_draw.obj and b/FocusTerra/FocusTerra/x64/Release/imgui_draw.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui_example_sdl_opengl3.obj b/FocusTerra/FocusTerra/x64/Release/imgui_example_sdl_opengl3.obj deleted file mode 100644 index 2a5d3403dfa1fdbd753974fa310284ceb9c7f954..0000000000000000000000000000000000000000 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui_example_sdl_opengl3.obj and /dev/null differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui_impl_opengl3.obj b/FocusTerra/FocusTerra/x64/Release/imgui_impl_opengl3.obj index cf3907bc161c5c8a0d6f012486c7548dcedf9fb0..8c980d5fbcbfee3ce717bad746ee9f1624c6b44e 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui_impl_opengl3.obj and b/FocusTerra/FocusTerra/x64/Release/imgui_impl_opengl3.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui_impl_sdl.obj b/FocusTerra/FocusTerra/x64/Release/imgui_impl_sdl.obj index ce5081a73613fe4e657ba33c71ac4b0909a1c629..0cd3b518ece0e6ed49e13be8d6d3c30d40532539 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui_impl_sdl.obj and b/FocusTerra/FocusTerra/x64/Release/imgui_impl_sdl.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/imgui_widgets.obj b/FocusTerra/FocusTerra/x64/Release/imgui_widgets.obj index 15b2c0d42b16f91a79de6be2505a74973c6fd1c2..090a08fde90c1cf8f382322bdf5bf24457695442 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/imgui_widgets.obj and b/FocusTerra/FocusTerra/x64/Release/imgui_widgets.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/infrastructure.obj b/FocusTerra/FocusTerra/x64/Release/infrastructure.obj index c0961dbf81cac9c7095b7cfcbc395bbfbff0e43c..9caf3ba1f99eb88966ec40e0abcb5de95181937e 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/infrastructure.obj and b/FocusTerra/FocusTerra/x64/Release/infrastructure.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/init.obj b/FocusTerra/FocusTerra/x64/Release/init.obj index 27027313b8caba3ecc994dd0f78fa0f7e294dc00..cc56d833e29b23273c5305ef04b95fe3a4400b62 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/init.obj and b/FocusTerra/FocusTerra/x64/Release/init.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/input_handler.obj b/FocusTerra/FocusTerra/x64/Release/input_handler.obj index 95b11625b0cf94a3d5771b0eb7aaa0a946e57e2c..1ddbf2da81292d29395ccb468901caf2db586ad9 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/input_handler.obj and b/FocusTerra/FocusTerra/x64/Release/input_handler.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/main.obj b/FocusTerra/FocusTerra/x64/Release/main.obj deleted file mode 100644 index 8d13c9c7d890f78a4915ee47acc95d12e165b631..0000000000000000000000000000000000000000 Binary files a/FocusTerra/FocusTerra/x64/Release/main.obj and /dev/null differ diff --git a/FocusTerra/FocusTerra/x64/Release/main_3d.obj b/FocusTerra/FocusTerra/x64/Release/main_3d.obj deleted file mode 100644 index 304f9d5bed6c5a677d539138cf76ffdfa130ddfe..0000000000000000000000000000000000000000 Binary files a/FocusTerra/FocusTerra/x64/Release/main_3d.obj and /dev/null differ diff --git a/FocusTerra/FocusTerra/x64/Release/main_refactored.obj b/FocusTerra/FocusTerra/x64/Release/main_refactored.obj deleted file mode 100644 index d20a3dc1cca32d03d554ef0ee6f7c144a0f1619a..0000000000000000000000000000000000000000 Binary files a/FocusTerra/FocusTerra/x64/Release/main_refactored.obj and /dev/null differ diff --git a/FocusTerra/FocusTerra/x64/Release/main_testing.obj b/FocusTerra/FocusTerra/x64/Release/main_testing.obj index 9175e7b1e6330119d6d89e29af3093806a082b43..2b71187a70b4b9a4c2ccbec648275071a1bd3d01 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/main_testing.obj and b/FocusTerra/FocusTerra/x64/Release/main_testing.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/pevent.obj b/FocusTerra/FocusTerra/x64/Release/pevent.obj index 216c2aebd50115ea4244a527cfb481005c9634ab..257580f048528e4a779aa70a3dcaa4090d40e4fa 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/pevent.obj and b/FocusTerra/FocusTerra/x64/Release/pevent.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/shader.obj b/FocusTerra/FocusTerra/x64/Release/shader.obj index 5b2c2bc2244958df3c5b3dd27822f1cf3634bf0c..48873ae056f99b23f966a2ba4391f32c7b14af4c 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/shader.obj and b/FocusTerra/FocusTerra/x64/Release/shader.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/slim_blockchain_handler.obj b/FocusTerra/FocusTerra/x64/Release/slim_blockchain_handler.obj index 6fb5f1e38cf605e44bfdc038797260bdf8a5851b..977de2618614cb28f74ff358d61cf040e77a8bbe 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/slim_blockchain_handler.obj and b/FocusTerra/FocusTerra/x64/Release/slim_blockchain_handler.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/toolbox.obj b/FocusTerra/FocusTerra/x64/Release/toolbox.obj index 35331eaa53991d542273eb7d65860589e1cdd3da..48f03404287bdd7ebc895b6e67bdf2f91ed80ab6 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/toolbox.obj and b/FocusTerra/FocusTerra/x64/Release/toolbox.obj differ diff --git a/FocusTerra/FocusTerra/x64/Release/vc142.pdb b/FocusTerra/FocusTerra/x64/Release/vc142.pdb index 2bb360ed9adb21ad80b8065953996ef562480f99..ed4ea1d82c83de7c93d2bceee60946a610428e21 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/vc142.pdb and b/FocusTerra/FocusTerra/x64/Release/vc142.pdb differ diff --git a/FocusTerra/FocusTerra/x64/Release/wave_handler.obj b/FocusTerra/FocusTerra/x64/Release/wave_handler.obj index 94c45805472653d18989c0f956a3a189ecbcaf6a..2b080db7088c89d65b8c3e535db8f8be82df0e2f 100644 Binary files a/FocusTerra/FocusTerra/x64/Release/wave_handler.obj and b/FocusTerra/FocusTerra/x64/Release/wave_handler.obj differ diff --git a/FocusTerra/x64/Release/FocusTerra.exe b/FocusTerra/x64/Release/FocusTerra.exe index d0c848c5b84bf46eaf034fef0f95b6f949408917..159bde3a141874f04c6f0bbf1b930d6e858bb022 100644 Binary files a/FocusTerra/x64/Release/FocusTerra.exe and b/FocusTerra/x64/Release/FocusTerra.exe differ diff --git a/FocusTerra/x64/Release/FocusTerra.pdb b/FocusTerra/x64/Release/FocusTerra.pdb index c88e757bf116348c23046a4d3c290d226279d257..2e96651623a2c237f64094581ea613a7a21e1877 100644 Binary files a/FocusTerra/x64/Release/FocusTerra.pdb and b/FocusTerra/x64/Release/FocusTerra.pdb differ diff --git a/include/efficient_block.hpp b/include/efficient_block.hpp index d968aa9950b305be1ba2b5c3ca64a44ec252887b..bf685ffaaa8f20a8ee001cec7a52c48225508c43 100644 --- a/include/efficient_block.hpp +++ b/include/efficient_block.hpp @@ -15,6 +15,8 @@ public: bool needs_removal() const; glm::ivec4 xywh() const; bool is_inside(int x, int y) const; + int width() const; + int height() const; private: glm::ivec4 xywh_; diff --git a/include/slim_blockchain_handler.hpp b/include/slim_blockchain_handler.hpp index d27682efdb988c9d0291c68d77fa0f3033035507..faf8cbbd71d12a96e910c02751c6e4cd988008be 100644 --- a/include/slim_blockchain_handler.hpp +++ b/include/slim_blockchain_handler.hpp @@ -1,26 +1,54 @@ #pragma once #include <list> -#include <block.hpp> +#include <efficient_block.hpp> #include <toolbox.hpp> #include <enums.hpp> #include <iostream> +#include <glm/glm.hpp> +#include <glm/gtc/matrix_transform.hpp> +#include <glm/gtc/type_ptr.hpp> +#include <shader.hpp> class SlimBlockchainHandler { public: /*Assumes all toolbox textures are initialized*/ SlimBlockchainHandler(Toolbox& tb, MSTATE initial_mstate) : previous_mstate_(static_cast<int>(initial_mstate)), blockchain_(0), - dragpairs_(0) + dragpairs_(0), + shader_drawblocks_((tb.shader_path + "draw_blocks.vert").c_str(), (tb.shader_path + "draw_blocks.frag").c_str()) { - glGenFramebuffers(1, &fbo_); - glBindFramebuffer(GL_FRAMEBUFFER, fbo_); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tb.tex_const_zero, 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, tb.tex_damp_clean, 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, tb.tex_wave_clean, 0); + /*Set up Framebuffers*/ + glGenFramebuffers(1, &fbo_wave_); + glBindFramebuffer(GL_FRAMEBUFFER, fbo_wave_); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tb.tex_wave_1, 0); + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + std::cout << "ERROR::FRAMEBUFFER: Blockchain Framebuffer not complete!" << std::endl; + } + glGenFramebuffers(1, &fbo_dynamic_); + glBindFramebuffer(GL_FRAMEBUFFER, fbo_dynamic_); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tb.tex_damp_dynamic, 0); + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + std::cout << "ERROR::FRAMEBUFFER: Blockchain Framebuffer not complete!" << std::endl; + } + glGenFramebuffers(1, &fbo_static_); + glBindFramebuffer(GL_FRAMEBUFFER, fbo_static_); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tb.tex_damp_static, 0); if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { std::cout << "ERROR::FRAMEBUFFER: Blockchain Framebuffer not complete!" << std::endl; } glBindFramebuffer(GL_FRAMEBUFFER, 0); + + /*Set up rendering infrastructure*/ + glGenVertexArrays(1, &vao_); + glGenBuffers(1, &vbo_); + glBindVertexArray(vao_); + glBindBuffer(GL_ARRAY_BUFFER, vbo_); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); + glEnableVertexAttribArray(0); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); + glEnableVertexAttribArray(1); + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); } void update(Toolbox& tb); @@ -29,19 +57,33 @@ public: private: void clear_blocks_(); void update_blocks_(const Toolbox& tb, bool reload_all); - bool in_wave_window_(const Toolbox&, const Pevent&) const; - //Patterns - void upload_singleslit_(Toolbox&); - void upload_doubleslit_(Toolbox&); - void upload_lattice_(Toolbox&); - void upload_waveguide_(Toolbox&); + void queue_singleslit_(Toolbox&); + void queue_doubleslit_(Toolbox&); + void queue_lattice_(Toolbox&); + void queue_waveguide_(Toolbox&); + //Vertex Calculation + void xywhs_to_vertices_(const Toolbox& tb, const std::vector<bool>& duplicates, const std::vector<glm::ivec4>& xywhs, std::vector<float>& vertices) const; + //Duplicate identification + void find_dynamic_duplicates_(); + //Data int previous_mstate_ = static_cast<int>(MSTATE::PLACE); /*Keep track when mstate changes*/ - std::list<Block> blockchain_; /*Blocks present in system*/ - std::list<std::pair<Block*, SDL_FingerID> > dragpairs_; /*Dragged Blocks and their dragging finger*/ - - /*Framebuffer*/ - GLuint fbo_ = 0; + std::list<EfficientBlock> blockchain_; /*Blocks present in system*/ + std::list<std::pair<EfficientBlock*, SDL_FingerID> > dragpairs_; /*Dragged Blocks and their dragging finger*/ + /*Rendering infrastructure*/ + Shader shader_drawblocks_; + GLuint vao_; + GLuint vbo_; + /*Framebuffers*/ + GLuint fbo_wave_ = 0; + GLuint fbo_dynamic_ = 0; + GLuint fbo_static_ = 0; + /*Drawlists*/ + std::vector<glm::ivec4> drawlist_static_; + std::vector<glm::ivec4> drawlist_dynamic_; + std::vector<glm::ivec4> eraselist_dynamic_; + std::vector<bool> drawlist_dynamic_duplicates_; + std::vector<bool> eraselist_dynamic_duplicates_; }; \ No newline at end of file diff --git a/shaders/draw_blocks.frag b/shaders/draw_blocks.frag new file mode 100644 index 0000000000000000000000000000000000000000..d8fb2a41a8da7240b71ff044933438abaeb79052 --- /dev/null +++ b/shaders/draw_blocks.frag @@ -0,0 +1,17 @@ +#version 410 core + +precision highp float; + +out vec4 FragColor; + +in vec2 textureCoordinates; + +uniform float color_multiplier; +uniform sampler2D source_texture; + +void main() +{ + vec4 tex_color = texture(source_texture, textureCoordinates); + + FragColor = tex_color * color_multiplier; +} \ No newline at end of file diff --git a/shaders/draw_blocks.vert b/shaders/draw_blocks.vert new file mode 100644 index 0000000000000000000000000000000000000000..9c55aff11bff55eaa64cf965633de88e3693a618 --- /dev/null +++ b/shaders/draw_blocks.vert @@ -0,0 +1,16 @@ +#version 410 core +layout (location = 0) in vec2 verCoords; +layout (location = 1) in vec2 texCoords; + +precision highp float; + +uniform float color_multiplier; +uniform sampler2D source_texture; + +out vec2 textureCoordinates; + +void main() +{ + gl_Position = vec4(verCoords.x, verCoords.y, 0.0, 1.0); + textureCoordinates = texCoords; +} \ No newline at end of file diff --git a/src/drawing_handler.cpp b/src/drawing_handler.cpp index e6253556f1b470444598733973f1aa1f91d718e1..e4a73bb9a1387ead74bd9e788290b208457fae25 100644 --- a/src/drawing_handler.cpp +++ b/src/drawing_handler.cpp @@ -72,6 +72,7 @@ void DrawingHandler::update(Toolbox& tb) { shader_draw_.use(); glBindFramebuffer(GL_FRAMEBUFFER, fbo_); glBindVertexArray(vao_); + glBindBuffer(GL_ARRAY_BUFFER, vbo_); glViewport(0, 0, tb.texture_w, tb.texture_h); for (Pevent& pev : tb.events) { /*Event is in wave window*/ @@ -169,6 +170,7 @@ void DrawingHandler::update(Toolbox& tb) { /*Unbind*/ glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); /*Push info to toolbox developer region*/ tb.num_drawers = num_drawers(); diff --git a/src/efficient_block.cpp b/src/efficient_block.cpp index 3a7ec64c4ceb868f9c30f4de49218f2f8c50723c..438dcc6e44c1eece94b6a35db0155e1b9e2e3de3 100644 --- a/src/efficient_block.cpp +++ b/src/efficient_block.cpp @@ -27,4 +27,12 @@ glm::ivec4 EfficientBlock::xywh() const { bool EfficientBlock::is_inside(int x, int y) const { return ((x >= xywh_.r) && (x <= xywh_.r + xywh_.b) && (y >= xywh_.g) && (y < xywh_.g + xywh_.a)); +} + +int EfficientBlock::width() const { + return xywh_.b; +} + +int EfficientBlock::height() const { + return xywh_.a; } \ No newline at end of file diff --git a/src/infrastructure.cpp b/src/infrastructure.cpp index 741df3d049e10261b5300df3ee4e0f61dd254c2d..6a15fdfa3318ce970402a1fb222a8d2b4b5da25f 100644 --- a/src/infrastructure.cpp +++ b/src/infrastructure.cpp @@ -58,7 +58,7 @@ bool Infrastructure::init(const std::string name, const int width, const int hei glViewport(0, 0, width, height); glClearColor(0.0f, 0.0f, 0.0f, 1.0); glClear(GL_COLOR_BUFFER_BIT); - SDL_GL_SetSwapInterval(0); //1 to turn on VSync, 0 to turn off VSync + SDL_GL_SetSwapInterval(1); //1 to turn on VSync, 0 to turn off VSync return true; } diff --git a/src/main_testing.cpp b/src/main_testing.cpp index 1f175472d9dbf42a48653914447c80c11d5162cf..1d8299d44894bd57ecbf0b307a6a28469b6fcd99 100644 --- a/src/main_testing.cpp +++ b/src/main_testing.cpp @@ -12,6 +12,8 @@ /*Screen resolution*/ #define WIDTH 2560 #define HEIGHT 1440 +//#define WIDTH 3840 +//#define HEIGHT 2160 int main(int argc, char** argv) { int tex_offscreen_left = 0; @@ -82,10 +84,12 @@ int main(int argc, char** argv) { //SDL_GetWindowSize(tb.infra.window(), &w_width, &w_height); size_t num_ev = tb.events.size(); size_t num_mess = tb.mailbox.size(); + /* if (num_ev != 0) std::cout << "Events: " << num_ev << std::endl; if (num_mess != 0) std::cout << "Messages: " << num_mess << std::endl; + */ //std::cout << "Window Dimensions: " << w_width << " x " << w_height << std::endl; GLint err = glGetError(); if (err != GL_NO_ERROR) { diff --git a/src/slim_blockchain_handler.cpp b/src/slim_blockchain_handler.cpp index 9e52b9556dc52fecd4b97421c09cdd00467c0e5b..01d993a5c7ad8af02e4142be3f5ca893a493794e 100644 --- a/src/slim_blockchain_handler.cpp +++ b/src/slim_blockchain_handler.cpp @@ -8,7 +8,7 @@ void SlimBlockchainHandler::update(Toolbox& tb) { //can't be dragging if mstate changes if (previous_mstate_ != tb.m_state) { - dragpairs_.clear(); + clear_blocks_(); } //update tracked mstate previous_mstate_ = tb.m_state; @@ -24,79 +24,81 @@ void SlimBlockchainHandler::update(Toolbox& tb) { break; case BLOCKCHAINMESSAGE::PATTERN_SINGLESLIT: clear_blocks_(); - upload_singleslit_(tb); + queue_singleslit_(tb); m.handled = true; break; case BLOCKCHAINMESSAGE::PATTERN_DOUBLESLIT: clear_blocks_(); - upload_doubleslit_(tb); + queue_doubleslit_(tb); m.handled = true; break; case BLOCKCHAINMESSAGE::PATTERN_LATTICE: clear_blocks_(); - upload_lattice_(tb); + queue_lattice_(tb); m.handled = true; break; case BLOCKCHAINMESSAGE::PATTERN_WAVEGUIDE: clear_blocks_(); - upload_waveguide_(tb); + queue_waveguide_(tb); m.handled = true; break; } } } - if (tb.m_state != static_cast<int>(MSTATE::IMMEDIATE)) { - return; - } - - /*Handle Events*/ - glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_); - for (Pevent& pev : tb.events) { - /*Handle event differently depending on where it is*/ - /*Event within wave window*/ - if (in_wave_window_(tb, pev)) { - switch (pev.type) { - /*Finger down, place Block, add to dragpairs*/ - case PEVENTTYPE::DOWN: - blockchain_.push_back(Block(tb.block_width, tb.block_height, pev.itcoord_x - tb.block_width / 2, tb.texture_h - (pev.itcoord_y + tb.block_height / 2), tb.tex_damp_dynamic, tb.tex_wave_1)); - dragpairs_.push_back({ &blockchain_.back(), pev.finger_id }); - break; - /*Finger up, find and remove the associated Block and dragpair*/ - case PEVENTTYPE::UP: { - auto released = std::find_if(dragpairs_.begin(), dragpairs_.end(), [=](auto dragpair) { return dragpair.second == pev.finger_id; }); - if (released != dragpairs_.end()) { - released->first->request_removal(); + if (tb.m_state == static_cast<int>(MSTATE::IMMEDIATE)) { + /*Handle Events*/ + for (Pevent& pev : tb.events) { + /*Handle event differently depending on where it is*/ + /*Event within wave window*/ + if (in_wave_window_(tb, pev)) { + switch (pev.type) { + /*Finger down, place Block, add to dragpairs*/ + case PEVENTTYPE::DOWN: + blockchain_.push_back(EfficientBlock(tb.block_width, tb.block_height, pev.itcoord_x - tb.block_width / 2, tb.texture_h - (pev.itcoord_y + tb.block_height / 2))); + dragpairs_.push_back({ &blockchain_.back(), pev.finger_id }); + drawlist_dynamic_.push_back(blockchain_.back().xywh()); + break; + /*Finger up, find and remove the associated Block and dragpair*/ + case PEVENTTYPE::UP: { + auto released = std::find_if(dragpairs_.begin(), dragpairs_.end(), [=](auto dragpair) { return dragpair.second == pev.finger_id; }); + if (released != dragpairs_.end()) { + released->first->request_removal(); + eraselist_dynamic_.push_back(released->first->xywh()); + } + dragpairs_.remove_if([=](auto dragpair) { return dragpair.second == pev.finger_id; }); + break; } - dragpairs_.remove_if([=](auto dragpair) { return dragpair.second == pev.finger_id; }); - break; - } - /*Finger moved, find and translate associated Block*/ - case PEVENTTYPE::MOVE: { - auto moved = std::find_if(dragpairs_.begin(), dragpairs_.end(), [=](auto dragpair) { return dragpair.second == pev.finger_id; }); - if (moved != dragpairs_.end()) { - moved->first->translate(pev.itcoord_x - moved->first->width() / 2, tb.texture_h - (pev.itcoord_y + moved->first->height() / 2)); + /*Finger moved, find and translate associated Block*/ + case PEVENTTYPE::MOVE: { + auto moved = std::find_if(dragpairs_.begin(), dragpairs_.end(), [=](auto dragpair) { return dragpair.second == pev.finger_id; }); + if (moved != dragpairs_.end()) { + eraselist_dynamic_.push_back(moved->first->xywh()); + moved->first->translate(pev.itcoord_x - moved->first->width() / 2, tb.texture_h - (pev.itcoord_y + moved->first->height() / 2)); + drawlist_dynamic_.push_back(moved->first->xywh()); + } + break; } - break; - } - } - } - /*Event outside wave window*/ - else { - switch (pev.type) { - /*Finger down outside wave area, don't care*/ - case PEVENTTYPE::DOWN: - break; - /*Finger up or moved outside wave area, if associated Block exists, clear it*/ - case PEVENTTYPE::UP: - case PEVENTTYPE::MOVE: { - auto released = std::find_if(dragpairs_.begin(), dragpairs_.end(), [=](auto dragpair) { return dragpair.second == pev.finger_id; }); - if (released != dragpairs_.end()) { - released->first->request_removal(); } - dragpairs_.remove_if([=](auto dragpair) { return dragpair.second == pev.finger_id; }); - break; } + /*Event outside wave window*/ + else { + switch (pev.type) { + /*Finger down outside wave area, don't care*/ + case PEVENTTYPE::DOWN: + break; + /*Finger up or moved outside wave area, if associated Block exists, clear it*/ + case PEVENTTYPE::UP: + case PEVENTTYPE::MOVE: { + auto released = std::find_if(dragpairs_.begin(), dragpairs_.end(), [=](auto dragpair) { return dragpair.second == pev.finger_id; }); + if (released != dragpairs_.end()) { + released->first->request_removal(); + eraselist_dynamic_.push_back(released->first->xywh()); + } + dragpairs_.remove_if([=](auto dragpair) { return dragpair.second == pev.finger_id; }); + break; + } + } } } } @@ -106,8 +108,6 @@ void SlimBlockchainHandler::update(Toolbox& tb) { /*Toolbox developer region*/ tb.num_blocks = num_blocks(); - - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); } size_t SlimBlockchainHandler::num_blocks() { @@ -115,33 +115,94 @@ size_t SlimBlockchainHandler::num_blocks() { } void SlimBlockchainHandler::clear_blocks_() { - for (Block& b : blockchain_) { + for (EfficientBlock& b : blockchain_) { + eraselist_dynamic_.push_back(b.xywh()); b.request_removal(); } dragpairs_.clear(); + blockchain_.clear(); } void SlimBlockchainHandler::update_blocks_(const Toolbox& tb, bool reload_all) { - /*Remove and upload as needed*/ - for (auto bit = blockchain_.begin(); bit != blockchain_.end(); ++bit) { - if (bit->needs_removal()) { - bit->remove(); + find_dynamic_duplicates_(); + if (drawlist_dynamic_.size() != 0 || drawlist_static_.size() != 0 || eraselist_dynamic_.size() != 0) { + glBindVertexArray(vao_); + glBindBuffer(GL_ARRAY_BUFFER, vbo_); + glViewport(0, 0, tb.texture_w, tb.texture_h); + glActiveTexture(GL_TEXTURE0); + shader_drawblocks_.use(); + } + std::vector<float> vertices; + /*Erase dynamic blocks*/ + if (eraselist_dynamic_.size() != 0) { + glBindFramebuffer(GL_FRAMEBUFFER, fbo_dynamic_); + glBindTexture(GL_TEXTURE_2D, tb.tex_damp_clean); + xywhs_to_vertices_(tb, eraselist_dynamic_duplicates_, eraselist_dynamic_, vertices); + if (vertices.size() != 0) { + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW); + /*Draw on damping*/ + shader_drawblocks_.setFloat("color_multiplier", 1.f); + for (size_t i = 0; i < eraselist_dynamic_.size(); ++i) { + glDrawArrays(GL_TRIANGLES, 6 * i, 6); + } } - if (bit->needs_upload()) { - bit->upload(); + eraselist_dynamic_.clear(); + } + /*Draw static blocks*/ + if (drawlist_static_.size() != 0) { + glBindFramebuffer(GL_FRAMEBUFFER, fbo_static_); + glBindTexture(GL_TEXTURE_2D, tb.tex_wave_clean); + xywhs_to_vertices_(tb, std::vector<bool>(drawlist_static_.size(), false), drawlist_static_, vertices); + if (vertices.size() != 0) { + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW); + /*Draw on damping*/ + shader_drawblocks_.setFloat("color_multiplier", 0.f); + for (size_t i = 0; i < drawlist_static_.size(); ++i) { + glDrawArrays(GL_TRIANGLES, 6 * i, 6); + } + /*Draw on wave*/ + shader_drawblocks_.setFloat("color_multiplier", 1.f); + glBindFramebuffer(GL_FRAMEBUFFER, fbo_wave_); + for (size_t i = 0; i < drawlist_static_.size(); ++i) { + glDrawArrays(GL_TRIANGLES, 6 * i, 6); + } } + drawlist_static_.clear(); } + /*Draw dynamic blocks*/ + if (drawlist_dynamic_.size() != 0) { + glBindFramebuffer(GL_FRAMEBUFFER, fbo_dynamic_); + glBindTexture(GL_TEXTURE_2D, tb.tex_wave_clean); + xywhs_to_vertices_(tb, drawlist_dynamic_duplicates_, drawlist_dynamic_, vertices); + if (vertices.size() != 0) { + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW); + /*Draw on damping*/ + shader_drawblocks_.setFloat("color_multiplier", 0.f); + for (size_t i = 0; i < drawlist_dynamic_.size(); ++i) { + glDrawArrays(GL_TRIANGLES, 6 * i, 6); + } + /*Draw on wave*/ + shader_drawblocks_.setFloat("color_multiplier", 1.f); + glBindFramebuffer(GL_FRAMEBUFFER, fbo_wave_); + for (size_t i = 0; i < drawlist_dynamic_.size(); ++i) { + glDrawArrays(GL_TRIANGLES, 6 * i, 6); + } + } + drawlist_dynamic_.clear(); + } + /*Drawing finished, reset OpenGL state*/ + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + + /*Clean up the blockchain*/ /* This doesn't work, because it invalidates all iterators/pointers, even in a list. See https://godbolt.org/z/GzxTExc44 blockchain_.erase(std::remove_if(blockchain_.begin(), blockchain_.end(), [](const Block& b) {return b.needs_removal(); }), blockchain_.end()); The following preserves iterator/pointer validity, which is what we need */ - blockchain_.remove_if([=](const Block& b) { return b.needs_removal(); }); - if (reload_all) { - for (auto b : blockchain_) { - b.upload(); - } - } + dragpairs_.remove_if([=](const std::pair<EfficientBlock*, SDL_FingerID>& dp) { return dp.first->needs_removal(); }); + blockchain_.remove_if([=](const EfficientBlock& b) { return b.needs_removal(); }); } bool SlimBlockchainHandler::in_wave_window_(const Toolbox& tb, const Pevent& pev) const { @@ -151,58 +212,51 @@ bool SlimBlockchainHandler::in_wave_window_(const Toolbox& tb, const Pevent& pev /*Structures*/ /*Note that they don't go into the blockchain, they only exist in the static damping texture*/ /*The correct wave texture for Blocks is tb.tex_wave_1*/ -void SlimBlockchainHandler::upload_singleslit_(Toolbox& tb) { +void SlimBlockchainHandler::queue_singleslit_(Toolbox& tb) { int block_width = 30; int slit_height = 40; int block_height = tb.texture_h / 2 - slit_height/2 - 1; - Block b_top(block_width, block_height, tb.texture_w / 3, tb.texture_h / 2 + slit_height / 2, tb.tex_damp_static, tb.tex_wave_1); - Block b_bottom(block_width, block_height, tb.texture_w / 3, 0, tb.tex_damp_static, tb.tex_wave_1); - glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_); - b_top.upload(); - b_bottom.upload(); - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + EfficientBlock b_top(block_width, block_height, tb.texture_w / 3, tb.texture_h / 2 + slit_height / 2); + EfficientBlock b_bottom(block_width, block_height, tb.texture_w / 3, 0); + drawlist_static_.push_back(b_top.xywh()); + drawlist_static_.push_back(b_bottom.xywh()); } -void SlimBlockchainHandler::upload_doubleslit_(Toolbox& tb) { +void SlimBlockchainHandler::queue_doubleslit_(Toolbox& tb) { int block_width = 30; int slit_height = 40; int mid_block_height = 30; int block_height = tb.texture_h / 2 - slit_height - mid_block_height / 2 - 1; - Block b_top(block_width, block_height, tb.texture_w / 3, tb.texture_h / 2 + mid_block_height / 2 + slit_height, tb.tex_damp_static, tb.tex_wave_1); - Block b_bottom(block_width, block_height, tb.texture_w / 3, 0, tb.tex_damp_static, tb.tex_wave_1); - Block b_middle(block_width, mid_block_height, tb.texture_w / 3, tb.texture_h / 2 - mid_block_height / 2, tb.tex_damp_static, tb.tex_wave_1); - glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_); - b_top.upload(); - b_bottom.upload(); - b_middle.upload(); - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + EfficientBlock b_top(block_width, block_height, tb.texture_w / 3, tb.texture_h / 2 + mid_block_height / 2 + slit_height); + EfficientBlock b_bottom(block_width, block_height, tb.texture_w / 3, 0); + EfficientBlock b_middle(block_width, mid_block_height, tb.texture_w / 3, tb.texture_h / 2 - mid_block_height / 2); + drawlist_static_.push_back(b_top.xywh()); + drawlist_static_.push_back(b_bottom.xywh()); + drawlist_static_.push_back(b_middle.xywh()); } /*Lattice targets frequency of 5Hz*/ -void SlimBlockchainHandler::upload_lattice_(Toolbox& tb) { +void SlimBlockchainHandler::queue_lattice_(Toolbox& tb) { int block_width = 10; int block_height = 10; int block_spacing = 30; int lattice_width = tb.texture_w / 3; int lattice_minx = tb.texture_w / 3 - lattice_width / 2; - glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_); for (float y = 0.f; y + block_height + block_spacing < tb.texture_h; y += block_spacing + block_height) { for (float x = lattice_minx; x < lattice_minx + lattice_width; x += block_spacing + block_height) { - Block new_block(block_width, block_height, x, y, tb.tex_damp_static, tb.tex_wave_1); - new_block.upload(); + EfficientBlock new_block(block_width, block_height, x, y); + drawlist_static_.push_back(new_block.xywh()); } } - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); } /*Lattice targets frequency of 5Hz*/ -void SlimBlockchainHandler::upload_waveguide_(Toolbox& tb) { +void SlimBlockchainHandler::queue_waveguide_(Toolbox& tb) { int block_width = 10; int block_height = 10; int block_spacing = 30; int lattice_width = tb.texture_w / 3; int lattice_minx = tb.texture_w / 3 - lattice_width / 2; - glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_); for (float y = 0.f; y + block_height + block_spacing < tb.texture_h; y += block_spacing + block_height) { if (y < tb.texture_h / 2 && y + block_spacing + block_height > tb.texture_h / 2) { continue; @@ -211,9 +265,73 @@ void SlimBlockchainHandler::upload_waveguide_(Toolbox& tb) { continue; } for (float x = lattice_minx; x < lattice_minx + lattice_width; x += block_spacing + block_height) { - Block new_block(block_width, block_height, x, y, tb.tex_damp_static, tb.tex_wave_1); - new_block.upload(); + EfficientBlock new_block(block_width, block_height, x, y); + drawlist_static_.push_back(new_block.xywh()); } } - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); } + +void SlimBlockchainHandler::xywhs_to_vertices_(const Toolbox& tb, const std::vector<bool>& duplicates, const std::vector<glm::ivec4>& xywhs, std::vector<float>& vertices) const { + float texwidth = tb.texture_w; + float texheight = tb.texture_h; + vertices.clear(); + vertices.reserve(24 * xywhs.size()); + for (size_t i = 0; i < xywhs.size(); ++i) { + const glm::ivec4& xywh = xywhs[i]; + if (duplicates[i]) { + continue; + } + float x = xywh.r >= 0 ? xywh.r : 0; + float y = xywh.g; + float w = xywh.r >= 0 ? xywh.b : xywh.b + xywh.r; + float h = xywh.a; + /*Lower Left Corner*/ + vertices.push_back(2. * (x) / texwidth - 1.f); //x + vertices.push_back(2. * (y) / texheight - 1.f); //y + vertices.push_back((x) / texwidth); //u + vertices.push_back((y) / texheight); //v + /*Top Right Corner*/ + vertices.push_back(2. * (x + w) / texwidth - 1.f); //x + vertices.push_back(2. * (y + h) / texheight - 1.f); //y + vertices.push_back((x + w) / texwidth); //u + vertices.push_back((y + h) / texheight); //v + /*Bottom Right Corner*/ + vertices.push_back(2. * (x + w) / texwidth - 1.f); //x + vertices.push_back(2. * (y) / texheight - 1.f); //y + vertices.push_back((x + w) / texwidth); //u + vertices.push_back((y) / texheight); //v + /*Lower Left Corner*/ + vertices.push_back(2. * (x) / texwidth - 1.f); //x + vertices.push_back(2. * (y) / texheight - 1.f); //y + vertices.push_back((x) / texwidth); //u + vertices.push_back((y) / texheight); //v + /*Top Right Corner*/ + vertices.push_back(2. * (x + w) / texwidth - 1.f); //x + vertices.push_back(2. * (y + h) / texheight - 1.f); //y + vertices.push_back((x + w) / texwidth); //u + vertices.push_back((y + h) / texheight); //v + /*Top Left Corner*/ + vertices.push_back(2. * (x) / texwidth - 1.f); //x + vertices.push_back(2. * (y + h) / texheight - 1.f); //y + vertices.push_back((x) / texwidth); //u + vertices.push_back((y + h) / texheight); //v + } +} + +void SlimBlockchainHandler::find_dynamic_duplicates_() { + drawlist_dynamic_duplicates_ = std::vector<bool>(drawlist_dynamic_.size(), false); + eraselist_dynamic_duplicates_ = std::vector<bool>(eraselist_dynamic_.size(), false); + if (drawlist_dynamic_.size() == 0 || eraselist_dynamic_.size() == 0) { + return; + } + for (size_t i_draw = 0; i_draw < drawlist_dynamic_.size(); ++i_draw) { + const glm::ivec4 dr = drawlist_dynamic_[i_draw]; + for (size_t i_erase = 0; i_erase < eraselist_dynamic_.size(); ++i_erase) { + const glm::ivec4 er = eraselist_dynamic_[i_erase]; + if (dr.r == er.r && dr.g == er.g && dr.b == er.b && er.a == dr.a) { + drawlist_dynamic_duplicates_[i_draw] = true; + eraselist_dynamic_duplicates_[i_erase] = true; + } + } + } +} \ No newline at end of file diff --git a/src/wave_handler.cpp b/src/wave_handler.cpp index a327687a06bc94def653ff73b6bf695c72895a41..4cdf85c3d8487181a77ffe0540c6a4aa8a9f941d 100644 --- a/src/wave_handler.cpp +++ b/src/wave_handler.cpp @@ -234,6 +234,8 @@ bool WaveHandler::initialize_2D_data_() glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); glBindVertexArray(0); + + return true; } bool WaveHandler::initialize_3D_data_() @@ -482,6 +484,7 @@ bool WaveHandler::initialize_comp_data_(const std::string damping_file) return false; } glBindFramebuffer(GL_FRAMEBUFFER, 0); + return true; } bool WaveHandler::initialize_render_data_(const std::string palette_file) { @@ -603,6 +606,8 @@ bool WaveHandler::initialize_shaders_() shdr_damp_.use(); shdr_damp_.setInt("tex_damping_static", 0); shdr_damp_.setInt("tex_damping_dynamic", 1); + + return true; } void WaveHandler::generate_and_transfer_textures(Toolbox& tb) const {