Changeset 7297892 in opengl-game for vulkan-game.hpp
- Timestamp:
- Apr 19, 2020, 4:06:03 AM (5 years ago)
- Branches:
- feature/imgui-sdl, master, points-test
- Children:
- 73a10ca
- Parents:
- 3950236
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vulkan-game.hpp
r3950236 r7297892 107 107 static float curTime; 108 108 109 110 // TODO: Look into using dynamic_cast to check types of SceneObject and EffectOverTime 111 112 struct BaseEffectOverTime { 113 bool deleted; 114 115 virtual void applyEffect() = 0; 116 117 BaseEffectOverTime() : 118 deleted(false) { 119 } 120 121 virtual ~BaseEffectOverTime() { 122 } 123 }; 124 125 template<class VertexType, class SSBOType> 126 struct EffectOverTime : public BaseEffectOverTime { 127 GraphicsPipeline_Vulkan<VertexType, SSBOType>& pipeline; 128 vector<SceneObject<VertexType, SSBOType>>& objects; 129 unsigned int objectIndex; 130 size_t effectedFieldOffset; 131 float startValue; 132 float startTime; 133 float changePerSecond; 134 135 EffectOverTime(GraphicsPipeline_Vulkan<VertexType, SSBOType>& pipeline, 136 vector<SceneObject<VertexType, SSBOType>>& objects, unsigned int objectIndex, 137 size_t effectedFieldOffset, float changePerSecond) : 138 pipeline(pipeline), 139 objects(objects), 140 objectIndex(objectIndex), 141 effectedFieldOffset(effectedFieldOffset), 142 startTime(curTime), 143 changePerSecond(changePerSecond) { 144 size_t ssboOffset = offset_of(&SceneObject<VertexType, SSBOType>::ssbo); 145 146 unsigned char* effectedFieldPtr = reinterpret_cast<unsigned char*>(&objects[objectIndex]) + 147 ssboOffset + effectedFieldOffset; 148 149 startValue = *reinterpret_cast<float*>(effectedFieldPtr); 150 } 151 152 void applyEffect() { 153 if (objects[objectIndex].ssbo.deleted) { 154 this->deleted = true; 155 return; 156 } 157 158 size_t ssboOffset = offset_of(&SceneObject<VertexType, SSBOType>::ssbo); 159 160 unsigned char* effectedFieldPtr = reinterpret_cast<unsigned char*>(&objects[objectIndex]) + 161 ssboOffset + effectedFieldOffset; 162 163 *reinterpret_cast<float*>(effectedFieldPtr) = startValue + (curTime - startTime) * changePerSecond; 164 165 objects[objectIndex].modified = true; 166 } 167 }; 168 109 169 class VulkanGame { 110 170 public: … … 226 286 UBO_VP_mats laser_VP_mats; 227 287 288 vector<BaseEffectOverTime*> effects; 289 228 290 time_point<steady_clock> startTime; 229 291 float prevTime, elapsedTime; … … 236 298 237 299 unsigned int leftLaserIdx = -1; 300 EffectOverTime<AsteroidVertex, SSBO_Asteroid>* leftLaserEffect = nullptr; 238 301 239 302 unsigned int rightLaserIdx = -1; 303 EffectOverTime<AsteroidVertex, SSBO_Asteroid>* rightLaserEffect = nullptr; 240 304 241 305 bool initWindow(int width, int height, unsigned char guiFlags);
Note:
See TracChangeset
for help on using the changeset viewer.