Advertisement
Okami

AppLayer.cpp

Dec 23rd, 2023 (edited)
913
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include "AppLayer.h"
  2. #include "Geometry.h"
  3.  
  4. #include "Network.h"
  5. #include "Neuron.h"
  6. #include "Connection.h"
  7.  
  8. #include <vector>
  9.  
  10. using namespace GLCore;
  11. using namespace GLCore::Utils;
  12. using namespace Shiryu::Geometry;
  13. using namespace Shiryu::NeuralNetwork;
  14.  
  15. AppLayer::AppLayer()
  16. {
  17.     network = new Network();  // Initialize in the constructor
  18. }
  19.  
  20. AppLayer::~AppLayer()
  21. {
  22.     delete network;
  23. }
  24.  
  25. void AppLayer::OnAttach()
  26. {
  27.     EnableGLDebugging();
  28.  
  29.     // Init here
  30.  
  31.     network->AddNeuron(0, {-.3f, 0}, 0.05f, 1);
  32.     network->AddNeuron(1, {.3f, 0}, 0.05f, 2);
  33.     network->AddNeuronConnection(0, 1);
  34. }
  35.  
  36. void AppLayer::OnDetach()
  37. {
  38.     // Shutdown here
  39.    
  40.  
  41. }
  42.  
  43. void AppLayer::OnEvent(Event& event)
  44. {
  45.     // Events here
  46. }
  47.  
  48. void AppLayer::OnUpdate(Timestep ts)
  49. {
  50.     // Render here
  51.     std::vector<Geometry*> gobjects;
  52.  
  53.     for (size_t i = 0; i < network->neurons.size(); i++)
  54.         gobjects.push_back(Geometry::Circle(network->neurons[i]->position, network->neurons[i]->radius));
  55.  
  56.     for (size_t i = 0; i < network->connections.size(); i++)
  57.         gobjects.push_back(Geometry::Line(network->Get(network->connections[i]->startNeuronId)->position, network->Get(network->connections[i]->endNeuronId)->position));
  58.  
  59.  
  60.     for (Geometry* geometry : gobjects)
  61.     {
  62.         // Bind VAO and VBO (create them if needed)
  63.         if (geometry->vao == 0) {
  64.             glGenVertexArrays(1, &geometry->vao);
  65.             glGenBuffers(1, &geometry->vbo);
  66.             glBindVertexArray(geometry->vao);
  67.             glBindBuffer(GL_ARRAY_BUFFER, geometry->vbo);
  68.             glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0);
  69.             glEnableVertexAttribArray(0);
  70.         }
  71.  
  72.         // Transfer VBO data if not already done
  73.         if (!geometry->vboDataTransferred) {
  74.             glBufferData(GL_ARRAY_BUFFER, geometry->vertices.size() * sizeof(float), geometry->vertices.data(), GL_STATIC_DRAW);
  75.             geometry->vboDataTransferred = true;
  76.         }
  77.  
  78.         // Bind shader and set uniforms
  79.         //glUseProgram(shaderProgram);  // Assuming you have a compiled shader program
  80.         // ... (Set uniforms for position, color, etc., based on your shader)
  81.  
  82.         if (geometry->mode == GL_LINES)
  83.             glLineWidth(geometry->lineWidth);
  84.  
  85.         // Draw the geometry
  86.         glBindVertexArray(geometry->vao);
  87.         glDrawArrays(geometry->mode, 0, geometry->numVertices);
  88.     }
  89.  
  90.     // Cleanup gobjects (using smart pointers would be better)
  91.     for (Geometry* geometry : gobjects) {
  92.         delete geometry;
  93.     }
  94. }
  95.  
  96. void AppLayer::OnImGuiRender()
  97. {
  98.     // ImGui here
  99. }
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement