2
0

Renderer.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // ----------------------------------------------------------------
  2. // From Game Programming in C++ by Sanjay Madhav
  3. // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
  4. //
  5. // Released under the BSD License
  6. // See LICENSE in root directory for full details.
  7. // ----------------------------------------------------------------
  8. #pragma once
  9. #include <string>
  10. #include <vector>
  11. #include <unordered_map>
  12. #include <SDL/SDL.h>
  13. #include "Math.h"
  14. struct DirectionalLight
  15. {
  16. // Direction of light
  17. Vector3 mDirection;
  18. // Diffuse color
  19. Vector3 mDiffuseColor;
  20. // Specular color
  21. Vector3 mSpecColor;
  22. };
  23. class Renderer
  24. {
  25. public:
  26. Renderer(class Game* game);
  27. ~Renderer();
  28. bool Initialize(float screenWidth, float screenHeight);
  29. void Shutdown();
  30. void UnloadData();
  31. void Draw();
  32. void AddSprite(class SpriteComponent* sprite);
  33. void RemoveSprite(class SpriteComponent* sprite);
  34. void AddMeshComp(class MeshComponent* mesh);
  35. void RemoveMeshComp(class MeshComponent* mesh);
  36. class Texture* GetTexture(const std::string& fileName);
  37. class Mesh* GetMesh(const std::string& fileName);
  38. void SetViewMatrix(const Matrix4& view) { mView = view; }
  39. void SetAmbientLight(const Vector3& ambient) { mAmbientLight = ambient; }
  40. DirectionalLight& GetDirectionalLight() { return mDirLight; }
  41. float GetScreenWidth() const { return mScreenWidth; }
  42. float GetScreenHeight() const { return mScreenHeight; }
  43. private:
  44. bool LoadShaders();
  45. void CreateSpriteVerts();
  46. void SetLightUniforms(class Shader* shader);
  47. // Map of textures loaded
  48. std::unordered_map<std::string, class Texture*> mTextures;
  49. // Map of meshes loaded
  50. std::unordered_map<std::string, class Mesh*> mMeshes;
  51. // All the sprite components drawn
  52. std::vector<class SpriteComponent*> mSprites;
  53. // All mesh components drawn
  54. std::vector<class MeshComponent*> mMeshComps;
  55. // Game
  56. class Game* mGame;
  57. // Sprite shader
  58. class Shader* mSpriteShader;
  59. // Sprite vertex array
  60. class VertexArray* mSpriteVerts;
  61. // Mesh shader
  62. class Shader* mMeshShader;
  63. // View/projection for 3D shaders
  64. Matrix4 mView;
  65. Matrix4 mProjection;
  66. // Width/height of screen
  67. float mScreenWidth;
  68. float mScreenHeight;
  69. // Lighting data
  70. Vector3 mAmbientLight;
  71. DirectionalLight mDirLight;
  72. // Window
  73. SDL_Window* mWindow;
  74. // OpenGL context
  75. SDL_GLContext mContext;
  76. };