Added init mutex to graphics.
This commit is contained in:
parent
9b2ca4d1d3
commit
b52bef795a
222
game/graphics.cc
222
game/graphics.cc
@ -35,6 +35,228 @@ Graphics::Graphics(glm::uvec2 windowSize, float nearPlane,
|
|||||||
Graphics::Graphics() {
|
Graphics::Graphics() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Graphics::Graphics(const Graphics &other) {
|
||||||
|
std::lock_guard<std::mutex> lock(other.init_mutex);
|
||||||
|
lastLightUpdate = other.lastLightUpdate;
|
||||||
|
lastWindUpdate = other.lastWindUpdate;
|
||||||
|
windTarget = other.windTarget;
|
||||||
|
wind = other.wind;
|
||||||
|
windDirection = other.windDirection;
|
||||||
|
windDirectionTarget = other.windDirectionTarget;
|
||||||
|
textureMovementPosition = other.textureMovementPosition;
|
||||||
|
windowSize = other.windowSize;
|
||||||
|
nearPlane = other.nearPlane;
|
||||||
|
farPlane = other.farPlane;
|
||||||
|
loadingScreenPath = other.loadingScreenPath;
|
||||||
|
loadingScreenContinuePath = other.loadingScreenContinuePath;
|
||||||
|
loadingScreen = other.loadingScreen;
|
||||||
|
loadingContinueScreen = other.loadingContinueScreen;
|
||||||
|
closestLights = other.closestLights;
|
||||||
|
closestFlames = other.closestFlames;
|
||||||
|
loadingShader = other.loadingShader;
|
||||||
|
lightingShader = other.lightingShader;
|
||||||
|
skydomeShader = other.skydomeShader;
|
||||||
|
depthCubeShader = other.depthCubeShader;
|
||||||
|
depthShader = other.depthShader;
|
||||||
|
flameShader = other.flameShader;
|
||||||
|
flamePostShader = other.flamePostShader;
|
||||||
|
depth_directionalMaps = other.depth_directionalMaps;
|
||||||
|
framebuffer_directional = other.framebuffer_directional;
|
||||||
|
depth_cubeMaps = other.depth_cubeMaps;
|
||||||
|
framebuffer_cube = other.framebuffer_cube;
|
||||||
|
framebuffer_light = other.framebuffer_light;
|
||||||
|
light_fbo_color_texture = other.light_fbo_color_texture;
|
||||||
|
light_fbo_depth_texture = other.light_fbo_depth_texture;
|
||||||
|
fullscreen_quad = other.fullscreen_quad;
|
||||||
|
fullscreen_quad_ab = other.fullscreen_quad_ab;
|
||||||
|
fullscreen_quad_loading = other.fullscreen_quad_loading;
|
||||||
|
fullscreen_quad_ab_loading = other.fullscreen_quad_ab_loading;
|
||||||
|
cube_size = other.cube_size;
|
||||||
|
maxShadowRenderCount = other.maxShadowRenderCount;
|
||||||
|
level = other.level;
|
||||||
|
number_of_texture_units = other.number_of_texture_units;
|
||||||
|
gameStart = other.gameStart;
|
||||||
|
loadingScreenWidth = other.loadingScreenWidth;
|
||||||
|
loadingScreenHeight = other.loadingScreenHeight;
|
||||||
|
renderShadows = other.renderShadows;
|
||||||
|
renderFlames = other.renderFlames;
|
||||||
|
renderDebug = other.renderDebug;
|
||||||
|
renderWorld = other.renderWorld;
|
||||||
|
debugDrawer = other.debugDrawer;
|
||||||
|
debug_ab = other.debug_ab;
|
||||||
|
debug_vao = other.debug_vao;
|
||||||
|
debugShader = other.debugShader;
|
||||||
|
renderQueue = other.renderQueue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Graphics::Graphics(Graphics &&other) {
|
||||||
|
std::lock_guard<std::mutex> lock(other.init_mutex);
|
||||||
|
lastLightUpdate = std::move(other.lastLightUpdate);
|
||||||
|
lastWindUpdate = std::move(other.lastWindUpdate);
|
||||||
|
windTarget = std::move(other.windTarget);
|
||||||
|
wind = std::move(other.wind);
|
||||||
|
windDirection = std::move(other.windDirection);
|
||||||
|
windDirectionTarget = std::move(other.windDirectionTarget);
|
||||||
|
textureMovementPosition = std::move(other.textureMovementPosition);
|
||||||
|
windowSize = std::move(other.windowSize);
|
||||||
|
nearPlane = std::move(other.nearPlane);
|
||||||
|
farPlane = std::move(other.farPlane);
|
||||||
|
loadingScreenPath = std::move(other.loadingScreenPath);
|
||||||
|
loadingScreenContinuePath = std::move(other.loadingScreenContinuePath);
|
||||||
|
loadingScreen = std::move(other.loadingScreen);
|
||||||
|
loadingContinueScreen = std::move(other.loadingContinueScreen);
|
||||||
|
closestLights = std::move(other.closestLights);
|
||||||
|
closestFlames = std::move(other.closestFlames);
|
||||||
|
loadingShader = std::move(other.loadingShader);
|
||||||
|
lightingShader = std::move(other.lightingShader);
|
||||||
|
skydomeShader = std::move(other.skydomeShader);
|
||||||
|
depthCubeShader = std::move(other.depthCubeShader);
|
||||||
|
depthShader = std::move(other.depthShader);
|
||||||
|
flameShader = std::move(other.flameShader);
|
||||||
|
flamePostShader = std::move(other.flamePostShader);
|
||||||
|
depth_directionalMaps = std::move(other.depth_directionalMaps);
|
||||||
|
framebuffer_directional = std::move(other.framebuffer_directional);
|
||||||
|
depth_cubeMaps = std::move(other.depth_cubeMaps);
|
||||||
|
framebuffer_cube = std::move(other.framebuffer_cube);
|
||||||
|
framebuffer_light = std::move(other.framebuffer_light);
|
||||||
|
light_fbo_color_texture = std::move(other.light_fbo_color_texture);
|
||||||
|
light_fbo_depth_texture = std::move(other.light_fbo_depth_texture);
|
||||||
|
fullscreen_quad = std::move(other.fullscreen_quad);
|
||||||
|
fullscreen_quad_ab = std::move(other.fullscreen_quad_ab);
|
||||||
|
fullscreen_quad_loading = std::move(other.fullscreen_quad_loading);
|
||||||
|
fullscreen_quad_ab_loading = std::move(other.fullscreen_quad_ab_loading);
|
||||||
|
cube_size = std::move(other.cube_size);
|
||||||
|
maxShadowRenderCount = std::move(other.maxShadowRenderCount);
|
||||||
|
level = std::move(other.level);
|
||||||
|
number_of_texture_units = std::move(other.number_of_texture_units);
|
||||||
|
gameStart = std::move(other.gameStart);
|
||||||
|
loadingScreenWidth = std::move(other.loadingScreenWidth);
|
||||||
|
loadingScreenHeight = std::move(other.loadingScreenHeight);
|
||||||
|
renderShadows = std::move(other.renderShadows);
|
||||||
|
renderFlames = std::move(other.renderFlames);
|
||||||
|
renderDebug = std::move(other.renderDebug);
|
||||||
|
renderWorld = std::move(other.renderWorld);
|
||||||
|
debugDrawer = std::move(other.debugDrawer);
|
||||||
|
debug_ab = std::move(other.debug_ab);
|
||||||
|
debug_vao = std::move(other.debug_vao);
|
||||||
|
debugShader = std::move(other.debugShader);
|
||||||
|
renderQueue = std::move(other.renderQueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
Graphics& Graphics::operator= (const Graphics &other) {
|
||||||
|
std::lock(init_mutex, other.init_mutex);
|
||||||
|
std::lock_guard<std::mutex> self_lock(init_mutex, std::adopt_lock);
|
||||||
|
std::lock_guard<std::mutex> other_lock(other.init_mutex, std::adopt_lock);
|
||||||
|
lastLightUpdate = other.lastLightUpdate;
|
||||||
|
lastWindUpdate = other.lastWindUpdate;
|
||||||
|
windTarget = other.windTarget;
|
||||||
|
wind = other.wind;
|
||||||
|
windDirection = other.windDirection;
|
||||||
|
windDirectionTarget = other.windDirectionTarget;
|
||||||
|
textureMovementPosition = other.textureMovementPosition;
|
||||||
|
windowSize = other.windowSize;
|
||||||
|
nearPlane = other.nearPlane;
|
||||||
|
farPlane = other.farPlane;
|
||||||
|
loadingScreenPath = other.loadingScreenPath;
|
||||||
|
loadingScreenContinuePath = other.loadingScreenContinuePath;
|
||||||
|
loadingScreen = other.loadingScreen;
|
||||||
|
loadingContinueScreen = other.loadingContinueScreen;
|
||||||
|
closestLights = other.closestLights;
|
||||||
|
closestFlames = other.closestFlames;
|
||||||
|
loadingShader = other.loadingShader;
|
||||||
|
lightingShader = other.lightingShader;
|
||||||
|
skydomeShader = other.skydomeShader;
|
||||||
|
depthCubeShader = other.depthCubeShader;
|
||||||
|
depthShader = other.depthShader;
|
||||||
|
flameShader = other.flameShader;
|
||||||
|
flamePostShader = other.flamePostShader;
|
||||||
|
depth_directionalMaps = other.depth_directionalMaps;
|
||||||
|
framebuffer_directional = other.framebuffer_directional;
|
||||||
|
depth_cubeMaps = other.depth_cubeMaps;
|
||||||
|
framebuffer_cube = other.framebuffer_cube;
|
||||||
|
framebuffer_light = other.framebuffer_light;
|
||||||
|
light_fbo_color_texture = other.light_fbo_color_texture;
|
||||||
|
light_fbo_depth_texture = other.light_fbo_depth_texture;
|
||||||
|
fullscreen_quad = other.fullscreen_quad;
|
||||||
|
fullscreen_quad_ab = other.fullscreen_quad_ab;
|
||||||
|
fullscreen_quad_loading = other.fullscreen_quad_loading;
|
||||||
|
fullscreen_quad_ab_loading = other.fullscreen_quad_ab_loading;
|
||||||
|
cube_size = other.cube_size;
|
||||||
|
maxShadowRenderCount = other.maxShadowRenderCount;
|
||||||
|
level = other.level;
|
||||||
|
number_of_texture_units = other.number_of_texture_units;
|
||||||
|
gameStart = other.gameStart;
|
||||||
|
loadingScreenWidth = other.loadingScreenWidth;
|
||||||
|
loadingScreenHeight = other.loadingScreenHeight;
|
||||||
|
renderShadows = other.renderShadows;
|
||||||
|
renderFlames = other.renderFlames;
|
||||||
|
renderDebug = other.renderDebug;
|
||||||
|
renderWorld = other.renderWorld;
|
||||||
|
debugDrawer = other.debugDrawer;
|
||||||
|
debug_ab = other.debug_ab;
|
||||||
|
debug_vao = other.debug_vao;
|
||||||
|
debugShader = other.debugShader;
|
||||||
|
renderQueue = other.renderQueue;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Graphics& Graphics::operator= (Graphics &&other) {
|
||||||
|
std::lock(init_mutex, other.init_mutex);
|
||||||
|
std::lock_guard<std::mutex> self_lock(init_mutex, std::adopt_lock);
|
||||||
|
std::lock_guard<std::mutex> other_lock(other.init_mutex, std::adopt_lock);
|
||||||
|
lastLightUpdate = std::move(other.lastLightUpdate);
|
||||||
|
lastWindUpdate = std::move(other.lastWindUpdate);
|
||||||
|
windTarget = std::move(other.windTarget);
|
||||||
|
wind = std::move(other.wind);
|
||||||
|
windDirection = std::move(other.windDirection);
|
||||||
|
windDirectionTarget = std::move(other.windDirectionTarget);
|
||||||
|
textureMovementPosition = std::move(other.textureMovementPosition);
|
||||||
|
windowSize = std::move(other.windowSize);
|
||||||
|
nearPlane = std::move(other.nearPlane);
|
||||||
|
farPlane = std::move(other.farPlane);
|
||||||
|
loadingScreenPath = std::move(other.loadingScreenPath);
|
||||||
|
loadingScreenContinuePath = std::move(other.loadingScreenContinuePath);
|
||||||
|
loadingScreen = std::move(other.loadingScreen);
|
||||||
|
loadingContinueScreen = std::move(other.loadingContinueScreen);
|
||||||
|
closestLights = std::move(other.closestLights);
|
||||||
|
closestFlames = std::move(other.closestFlames);
|
||||||
|
loadingShader = std::move(other.loadingShader);
|
||||||
|
lightingShader = std::move(other.lightingShader);
|
||||||
|
skydomeShader = std::move(other.skydomeShader);
|
||||||
|
depthCubeShader = std::move(other.depthCubeShader);
|
||||||
|
depthShader = std::move(other.depthShader);
|
||||||
|
flameShader = std::move(other.flameShader);
|
||||||
|
flamePostShader = std::move(other.flamePostShader);
|
||||||
|
depth_directionalMaps = std::move(other.depth_directionalMaps);
|
||||||
|
framebuffer_directional = std::move(other.framebuffer_directional);
|
||||||
|
depth_cubeMaps = std::move(other.depth_cubeMaps);
|
||||||
|
framebuffer_cube = std::move(other.framebuffer_cube);
|
||||||
|
framebuffer_light = std::move(other.framebuffer_light);
|
||||||
|
light_fbo_color_texture = std::move(other.light_fbo_color_texture);
|
||||||
|
light_fbo_depth_texture = std::move(other.light_fbo_depth_texture);
|
||||||
|
fullscreen_quad = std::move(other.fullscreen_quad);
|
||||||
|
fullscreen_quad_ab = std::move(other.fullscreen_quad_ab);
|
||||||
|
fullscreen_quad_loading = std::move(other.fullscreen_quad_loading);
|
||||||
|
fullscreen_quad_ab_loading = std::move(other.fullscreen_quad_ab_loading);
|
||||||
|
cube_size = std::move(other.cube_size);
|
||||||
|
maxShadowRenderCount = std::move(other.maxShadowRenderCount);
|
||||||
|
level = std::move(other.level);
|
||||||
|
number_of_texture_units = std::move(other.number_of_texture_units);
|
||||||
|
gameStart = std::move(other.gameStart);
|
||||||
|
loadingScreenWidth = std::move(other.loadingScreenWidth);
|
||||||
|
loadingScreenHeight = std::move(other.loadingScreenHeight);
|
||||||
|
renderShadows = std::move(other.renderShadows);
|
||||||
|
renderFlames = std::move(other.renderFlames);
|
||||||
|
renderDebug = std::move(other.renderDebug);
|
||||||
|
renderWorld = std::move(other.renderWorld);
|
||||||
|
debugDrawer = std::move(other.debugDrawer);
|
||||||
|
debug_ab = std::move(other.debug_ab);
|
||||||
|
debug_vao = std::move(other.debug_vao);
|
||||||
|
debugShader = std::move(other.debugShader);
|
||||||
|
renderQueue = std::move(other.renderQueue);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Graphics::init(Level* level) {
|
void Graphics::init(Level* level) {
|
||||||
// save Level
|
// save Level
|
||||||
|
@ -16,6 +16,10 @@ class Graphics {
|
|||||||
Graphics(glm::uvec2 windowSize, float nearPlane, float farPlane, int cube_size,
|
Graphics(glm::uvec2 windowSize, float nearPlane, float farPlane, int cube_size,
|
||||||
unsigned int maxShadowRenderCount, std::string screenPath,
|
unsigned int maxShadowRenderCount, std::string screenPath,
|
||||||
std::string screenContinuePath);
|
std::string screenContinuePath);
|
||||||
|
Graphics(const Graphics &other);
|
||||||
|
Graphics(Graphics &&other);
|
||||||
|
Graphics& operator= (const Graphics &other);
|
||||||
|
Graphics& operator= (Graphics &&other);
|
||||||
Graphics();
|
Graphics();
|
||||||
void init(Level* level);
|
void init(Level* level);
|
||||||
void render(double time);
|
void render(double time);
|
||||||
@ -88,6 +92,7 @@ class Graphics {
|
|||||||
SharedVertexArrayObject debug_vao;
|
SharedVertexArrayObject debug_vao;
|
||||||
SharedShaderProgram debugShader;
|
SharedShaderProgram debugShader;
|
||||||
std::vector<std::vector<std::vector<Object*>>*> renderQueue;
|
std::vector<std::vector<std::vector<Object*>>*> renderQueue;
|
||||||
|
mutable std::mutex init_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user