GL: Use return value of emplace_back()

emplace_back() returns a reference to the emplaced element, so we can
just make use of it instead of repeatedly querying back().
This commit is contained in:
Lioncash 2019-08-24 20:07:47 -04:00
parent e3b44edd51
commit 63c89a0bbf

View File

@ -1652,35 +1652,35 @@ struct GLCommandQueue final : IGraphicsCommandQueue {
void setShaderDataBinding(const ObjToken<IShaderDataBinding>& binding) override { void setShaderDataBinding(const ObjToken<IShaderDataBinding>& binding) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetShaderDataBinding); auto& cmd = cmds.emplace_back(Command::Op::SetShaderDataBinding);
cmds.back().binding = binding; cmd.binding = binding;
} }
void setRenderTarget(const ObjToken<ITextureR>& target) override { void setRenderTarget(const ObjToken<ITextureR>& target) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetRenderTarget); auto& cmd = cmds.emplace_back(Command::Op::SetRenderTarget);
cmds.back().target = target.get(); cmd.target = target.get();
} }
void setRenderTarget(const ObjToken<ITextureCubeR>& target, int face) override { void setRenderTarget(const ObjToken<ITextureCubeR>& target, int face) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetCubeRenderTarget); auto& cmd = cmds.emplace_back(Command::Op::SetCubeRenderTarget);
cmds.back().target = target.get(); cmd.target = target.get();
cmds.back().bindIdx = face; cmd.bindIdx = face;
} }
void setViewport(const SWindowRect& rect, float znear, float zfar) override { void setViewport(const SWindowRect& rect, float znear, float zfar) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetViewport); auto& cmd = cmds.emplace_back(Command::Op::SetViewport);
cmds.back().viewport.rect = rect; cmd.viewport.rect = rect;
cmds.back().viewport.znear = znear; cmd.viewport.znear = znear;
cmds.back().viewport.zfar = zfar; cmd.viewport.zfar = zfar;
} }
void setScissor(const SWindowRect& rect) override { void setScissor(const SWindowRect& rect) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetScissor); auto& cmd = cmds.emplace_back(Command::Op::SetScissor);
cmds.back().viewport.rect = rect; cmd.viewport.rect = rect;
} }
void resizeRenderTexture(const ObjToken<ITextureR>& tex, size_t width, size_t height) override { void resizeRenderTexture(const ObjToken<ITextureR>& tex, size_t width, size_t height) override {
@ -1697,75 +1697,74 @@ struct GLCommandQueue final : IGraphicsCommandQueue {
void generateMipmaps(const ObjToken<ITextureCubeR>& tex) override { void generateMipmaps(const ObjToken<ITextureCubeR>& tex) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::GenerateMips); auto& cmd = cmds.emplace_back(Command::Op::GenerateMips);
cmds.back().target = tex.get(); cmd.target = tex.get();
} }
void schedulePostFrameHandler(std::function<void()>&& func) override { m_pendingPosts1.push_back(std::move(func)); } void schedulePostFrameHandler(std::function<void()>&& func) override { m_pendingPosts1.push_back(std::move(func)); }
void setClearColor(const float rgba[4]) override { void setClearColor(const float rgba[4]) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetClearColor); auto& cmd = cmds.emplace_back(Command::Op::SetClearColor);
cmds.back().rgba[0] = rgba[0]; cmd.rgba = {rgba[0], rgba[1], rgba[2], rgba[3]};
cmds.back().rgba[1] = rgba[1];
cmds.back().rgba[2] = rgba[2];
cmds.back().rgba[3] = rgba[3];
} }
void clearTarget(bool render = true, bool depth = true) override { void clearTarget(bool render = true, bool depth = true) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::ClearTarget); auto& cmd = cmds.emplace_back(Command::Op::ClearTarget);
cmds.back().flags = 0; cmd.flags = 0;
if (render) if (render) {
cmds.back().flags |= GL_COLOR_BUFFER_BIT; cmd.flags |= GL_COLOR_BUFFER_BIT;
if (depth) }
cmds.back().flags |= GL_DEPTH_BUFFER_BIT; if (depth) {
cmd.flags |= GL_DEPTH_BUFFER_BIT;
}
} }
void draw(size_t start, size_t count) override { void draw(size_t start, size_t count) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::Draw); auto& cmd = cmds.emplace_back(Command::Op::Draw);
cmds.back().start = start; cmd.start = start;
cmds.back().count = count; cmd.count = count;
} }
void drawIndexed(size_t start, size_t count) override { void drawIndexed(size_t start, size_t count) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::DrawIndexed); auto& cmd = cmds.emplace_back(Command::Op::DrawIndexed);
cmds.back().start = start; cmd.start = start;
cmds.back().count = count; cmd.count = count;
} }
void drawInstances(size_t start, size_t count, size_t instCount, size_t startInst) override { void drawInstances(size_t start, size_t count, size_t instCount, size_t startInst) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::DrawInstances); auto& cmd = cmds.emplace_back(Command::Op::DrawInstances);
cmds.back().start = start; cmd.start = start;
cmds.back().count = count; cmd.count = count;
cmds.back().instCount = instCount; cmd.instCount = instCount;
cmds.back().startInst = startInst; cmd.startInst = startInst;
} }
void drawInstancesIndexed(size_t start, size_t count, size_t instCount, size_t startInst) override { void drawInstancesIndexed(size_t start, size_t count, size_t instCount, size_t startInst) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::DrawInstancesIndexed); auto& cmd = cmds.emplace_back(Command::Op::DrawInstancesIndexed);
cmds.back().start = start; cmd.start = start;
cmds.back().count = count; cmd.count = count;
cmds.back().instCount = instCount; cmd.instCount = instCount;
cmds.back().startInst = startInst; cmd.startInst = startInst;
} }
void resolveBindTexture(const ObjToken<ITextureR>& texture, const SWindowRect& rect, bool tlOrigin, int bindIdx, void resolveBindTexture(const ObjToken<ITextureR>& texture, const SWindowRect& rect, bool tlOrigin, int bindIdx,
bool color, bool depth, bool clearDepth) override { bool color, bool depth, bool clearDepth) override {
GLTextureR* tex = texture.cast<GLTextureR>(); const auto* const tex = texture.cast<GLTextureR>();
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::ResolveBindTexture); auto& cmd = cmds.emplace_back(Command::Op::ResolveBindTexture);
cmds.back().resolveTex = texture; cmd.resolveTex = texture;
cmds.back().bindIdx = bindIdx; cmd.bindIdx = bindIdx;
cmds.back().resolveColor = color; cmd.resolveColor = color;
cmds.back().resolveDepth = depth; cmd.resolveDepth = depth;
cmds.back().clearDepth = clearDepth; cmd.clearDepth = clearDepth;
SWindowRect intersectRect = rect.intersect(SWindowRect(0, 0, tex->m_width, tex->m_height)); const SWindowRect intersectRect = rect.intersect(SWindowRect(0, 0, tex->m_width, tex->m_height));
SWindowRect& targetRect = cmds.back().viewport.rect; SWindowRect& targetRect = cmd.viewport.rect;
targetRect.location[0] = intersectRect.location[0]; targetRect.location[0] = intersectRect.location[0];
if (tlOrigin) if (tlOrigin)
targetRect.location[1] = tex->m_height - intersectRect.location[1] - intersectRect.size[1]; targetRect.location[1] = tex->m_height - intersectRect.location[1] - intersectRect.size[1];
@ -1777,8 +1776,8 @@ struct GLCommandQueue final : IGraphicsCommandQueue {
void resolveDisplay(const ObjToken<ITextureR>& source) override { void resolveDisplay(const ObjToken<ITextureR>& source) override {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::Present); auto& cmd = cmds.emplace_back(Command::Op::Present);
cmds.back().source = source; cmd.source = source;
} }
void addVertexFormat(const ObjToken<IShaderDataBinding>& fmt) { void addVertexFormat(const ObjToken<IShaderDataBinding>& fmt) {
@ -1849,8 +1848,8 @@ struct GLCommandQueue final : IGraphicsCommandQueue {
void pushDebugGroup(const char* name, const std::array<float, 4>& color) { void pushDebugGroup(const char* name, const std::array<float, 4>& color) {
if (GLEW_KHR_debug) { if (GLEW_KHR_debug) {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::PushDebugGroup); auto& cmd = cmds.emplace_back(Command::Op::PushDebugGroup);
cmds.back().name = name; cmd.name = name;
} }
} }