#include "main_code.h" #include #include #include #include #include "include/Engine.h" #include "main_code.h" TMyApplication* Application; static const float BUFFER_DISTANCE = 50.f; TRenderPair linesToRenderBoxes(const std::vector>& lineArr) { TRenderPair pair; for (size_t i = 0; i < lineArr.size(); i++) { Vector2f startPoint = lineArr[i].first; Vector2f endPoint = lineArr[i].second; Vector2f renderAreaStart{ std::min(startPoint(0), endPoint(0)) - BUFFER_DISTANCE, std::min(startPoint(1), endPoint(1)) - BUFFER_DISTANCE }; Vector2f renderAreEnd{ std::max(startPoint(0), endPoint(0)) + BUFFER_DISTANCE, std::max(startPoint(1), endPoint(1)) + BUFFER_DISTANCE }; pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreaStart(0), renderAreaStart(1), 0)); pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreaStart(0), renderAreEnd(1), 0)); pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreEnd(0), renderAreEnd(1), 0)); pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreaStart(0), renderAreaStart(1), 0)); pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreEnd(0), renderAreEnd(1), 0)); pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreEnd(0), renderAreaStart(1), 0)); pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1)); pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1)); pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1)); pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1)); pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1)); pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1)); Vector2f lineVec = endPoint - startPoint; Vector2f lineNormVec = { -lineVec(1), lineVec(0) }; lineNormVec.normalize(); //float distance = abs(normVec.x*(position.x - startPoint.x) + normVec.y*(position.y - startPoint.y)); //distance = a*x + b*y + c, here we calculate a, b,c and pass them to shader float a = lineNormVec(0); float b = lineNormVec(1); float c = -(lineNormVec(0)*startPoint(0) + lineNormVec(1)*startPoint(1)); pair.second.Data.Vec3CoordArr["vLineParams"].push_back(Vector3f(a, b, c)); pair.second.Data.Vec3CoordArr["vLineParams"].push_back(Vector3f(a, b, c)); pair.second.Data.Vec3CoordArr["vLineParams"].push_back(Vector3f(a, b, c)); pair.second.Data.Vec3CoordArr["vLineParams"].push_back(Vector3f(a, b, c)); pair.second.Data.Vec3CoordArr["vLineParams"].push_back(Vector3f(a, b, c)); pair.second.Data.Vec3CoordArr["vLineParams"].push_back(Vector3f(a, b, c)); pair.second.Data.Vec4CoordArr["vStartPointEndPoint"].push_back(Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1))); pair.second.Data.Vec4CoordArr["vStartPointEndPoint"].push_back(Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1))); pair.second.Data.Vec4CoordArr["vStartPointEndPoint"].push_back(Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1))); pair.second.Data.Vec4CoordArr["vStartPointEndPoint"].push_back(Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1))); pair.second.Data.Vec4CoordArr["vStartPointEndPoint"].push_back(Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1))); pair.second.Data.Vec4CoordArr["vStartPointEndPoint"].push_back(Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1))); } pair.second.RefreshBuffer(); pair.first = TRenderParams().withShader("AntialiasingShader"); return pair; } void TMyApplication::InnerInit() { Application = this; #ifdef TARGET_WIN32 #ifdef NDEBUG //ST::PathToResources = "resources/"; ST::PathToResources = "../../../assets/"; #else ST::PathToResources = "../../../assets/"; #endif #endif #ifdef TARGET_IOS ST::PathToResources = "assets/"; #endif if (Console != NULL) { *Console<<"APP INIT\n"; } srand (static_cast(time(NULL))); ResourceManager->ShaderManager.AddShader("AntialiasingShader", "ms_vertex.txt", "ms_fragment.txt"); ResourceManager->TexList.AddTexture("console_bkg.bmp"); std::vector> lineArr; for (int i = 0; i < 10; i++) { lineArr.push_back({ {50.f + i * 20.f, 50.f}, { 60.f + i * 20.f, 440.f } }); lineArr.push_back({ { 60.f + i * 20.f, 440.f },{ 70.f + i * 20.f, 50.f } }); }; lineRenderPair = linesToRenderBoxes(lineArr); Renderer->PushShader("AntialiasingShader"); Renderer->SetOrthoProjection(); Renderer->SetFullScreenViewport(); Inited = true; } void TMyApplication::InnerDeinit() { Inited = false; Loaded = false; if (Console != NULL) { *Console<<"APP DEINIT\n"; } } void TMyApplication::OnMouseWheel(short int delta) { scale += (delta > 0 ? 1 : -1) * 0.25; if(scale < 0.25) { scale = 0.25; } } void TMyApplication::InnerOnTapDown(Vector2f p) { } void TMyApplication::InnerOnTapUp(Vector2f p) { } void TMyApplication::InnerOnTapUpAfterMove(Vector2f p) { } void TMyApplication::InnerOnMove(Vector2f p, Vector2f shift) { } void TMyApplication::OnFling(Vector2f v) { } void TMyApplication::InnerDraw() { //Render the frame Renderer->SetProjectionMatrix(512.f, 512.f); Renderer->PushMatrix(); Renderer->ScaleMatrix(scale); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); CheckGlError(""); TRenderParamsSetter params(lineRenderPair.first); Renderer->DrawTriangleList(lineRenderPair.second); Renderer->PopMatrix(); CheckGlError(""); } void TMyApplication::InnerUpdate(size_t dt) { } bool TMyApplication::IsLoaded() { return Loaded; } bool TMyApplication::IsInited() { return Inited; }