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(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) {
|
||||
// save Level
|
||||
|
@ -16,6 +16,10 @@ class Graphics {
|
||||
Graphics(glm::uvec2 windowSize, float nearPlane, float farPlane, int cube_size,
|
||||
unsigned int maxShadowRenderCount, std::string screenPath,
|
||||
std::string screenContinuePath);
|
||||
Graphics(const Graphics &other);
|
||||
Graphics(Graphics &&other);
|
||||
Graphics& operator= (const Graphics &other);
|
||||
Graphics& operator= (Graphics &&other);
|
||||
Graphics();
|
||||
void init(Level* level);
|
||||
void render(double time);
|
||||
@ -88,6 +92,7 @@ class Graphics {
|
||||
SharedVertexArrayObject debug_vao;
|
||||
SharedShaderProgram debugShader;
|
||||
std::vector<std::vector<std::vector<Object*>>*> renderQueue;
|
||||
mutable std::mutex init_mutex;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user