fixed bug where it was impossible to select objects via clicking

This commit is contained in:
DJMrTV 2023-11-12 16:59:45 +01:00
commit 13703f1775

View file

@ -50,7 +50,7 @@ MainViewport::MainViewport() : Graphics::ViewportWidget("Main Viewport", true),
m_internalFramebuf = std::make_unique<Graphics::Framebuffer>( m_internalFramebuf = std::make_unique<Graphics::Framebuffer>(
std::vector<Graphics::FramebufferTextureInfo>{ std::vector<Graphics::FramebufferTextureInfo>{
{GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, GL_COLOR_ATTACHMENT0}, {GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, GL_COLOR_ATTACHMENT0},
{GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT, GL_COLOR_ATTACHMENT1}, {GL_R32I, GL_RED_INTEGER, GL_INT, GL_COLOR_ATTACHMENT1},
{GL_RGBA16F, GL_RGBA, GL_FLOAT, GL_COLOR_ATTACHMENT2}, {GL_RGBA16F, GL_RGBA, GL_FLOAT, GL_COLOR_ATTACHMENT2},
{GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH_STENCIL_ATTACHMENT} {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, GL_DEPTH_STENCIL_ATTACHMENT}
}, },
@ -321,7 +321,7 @@ void MainViewport::Draw() {
continue; continue;
} else if (IsArea(obj.Type) && drawAllAreas) { } else if (IsArea(obj.Type) && drawAllAreas) {
static auto AreaMdl = Model("St_Area"); static auto AreaMdl = Model("St_Area");
glUniform1ui(ObjIdPos, ObjID); glUniform1i(ObjIdPos, ObjID);
AreaMdl.Draw(obj.TF, m_internalFramebuf->m_shader, VP); AreaMdl.Draw(obj.TF, m_internalFramebuf->m_shader, VP);
ObjID++; ObjID++;
continue; continue;
@ -339,7 +339,7 @@ void MainViewport::Draw() {
auto &mdl = MdlFromObj.find(obj.Type)->second; auto &mdl = MdlFromObj.find(obj.Type)->second;
glUniform1ui(ObjIdPos, ObjID); glUniform1i(ObjIdPos, ObjID);
if (&obj == selectedElem) if (&obj == selectedElem)
glUniform4f(ObjColPos, 1, .7, .7, 1); glUniform4f(ObjColPos, 1, .7, .7, 1);
@ -354,7 +354,7 @@ void MainViewport::Draw() {
if (selectedElem != nullptr) { if (selectedElem != nullptr) {
auto selobj = selectedElem; auto selobj = selectedElem;
glUniform1ui(ObjIdPos, 0); glUniform1i(ObjIdPos, 0);
if (IsArea(selobj->Type)) { if (IsArea(selobj->Type)) {
static auto AreaMdl = Model("St_Area"); static auto AreaMdl = Model("St_Area");
@ -395,21 +395,21 @@ void MainViewport::Draw() {
glUniform4f(ObjColPos, 0.5, 0, 0, 1); glUniform4f(ObjColPos, 0.5, 0, 0, 1);
if (HoveredObjId == 1) if (HoveredObjId == 1)
glUniform4f(ObjColPos, 1, 0, 0, 1); glUniform4f(ObjColPos, 1, 0, 0, 1);
glUniform1ui(ObjIdPos, 1); glUniform1i(ObjIdPos, 1);
Arrow.Draw(tf, m_internalFramebuf->m_shader, VP); Arrow.Draw(tf, m_internalFramebuf->m_shader, VP);
tf.Rotation = {0, 0, 0}; tf.Rotation = {0, 0, 0};
glUniform4f(ObjColPos, 0, 0.5, 0, 1); glUniform4f(ObjColPos, 0, 0.5, 0, 1);
if (HoveredObjId == 2) if (HoveredObjId == 2)
glUniform4f(ObjColPos, 0, 1, 0, 1); glUniform4f(ObjColPos, 0, 1, 0, 1);
glUniform1ui(ObjIdPos, 2); glUniform1i(ObjIdPos, 2);
Arrow.Draw(tf, m_internalFramebuf->m_shader, VP); Arrow.Draw(tf, m_internalFramebuf->m_shader, VP);
tf.Rotation = {90, 0, 0}; tf.Rotation = {90, 0, 0};
glUniform4f(ObjColPos, 0, 0, 0.5, 1); glUniform4f(ObjColPos, 0, 0, 0.5, 1);
if (HoveredObjId == 3) if (HoveredObjId == 3)
glUniform4f(ObjColPos, 0, 0, 1, 1); glUniform4f(ObjColPos, 0, 0, 1, 1);
glUniform1ui(ObjIdPos, 3); glUniform1i(ObjIdPos, 3);
Arrow.Draw(tf, m_internalFramebuf->m_shader, VP); Arrow.Draw(tf, m_internalFramebuf->m_shader, VP);
glUniform4f(ObjColPos, 1, 1, 1, 1); glUniform4f(ObjColPos, 1, 1, 1, 1);
@ -426,21 +426,21 @@ void MainViewport::Draw() {
glUniform4f(ObjColPos, 0.5, 0, 0, 1); glUniform4f(ObjColPos, 0.5, 0, 0, 1);
if (HoveredObjId == 1) if (HoveredObjId == 1)
glUniform4f(ObjColPos, 1, 0, 0, 1); glUniform4f(ObjColPos, 1, 0, 0, 1);
glUniform1ui(ObjIdPos, 1); glUniform1i(ObjIdPos, 1);
Scalar.Draw(tf, m_internalFramebuf->m_shader, VP); Scalar.Draw(tf, m_internalFramebuf->m_shader, VP);
tf.Rotation = {selobj->TF.Rotation.X, selobj->TF.Rotation.Y, selobj->TF.Rotation.Z}; tf.Rotation = {selobj->TF.Rotation.X, selobj->TF.Rotation.Y, selobj->TF.Rotation.Z};
glUniform4f(ObjColPos, 0, 0.5, 0, 1); glUniform4f(ObjColPos, 0, 0.5, 0, 1);
if (HoveredObjId == 2) if (HoveredObjId == 2)
glUniform4f(ObjColPos, 0, 1, 0, 1); glUniform4f(ObjColPos, 0, 1, 0, 1);
glUniform1ui(ObjIdPos, 2); glUniform1i(ObjIdPos, 2);
Scalar.Draw(tf, m_internalFramebuf->m_shader, VP); Scalar.Draw(tf, m_internalFramebuf->m_shader, VP);
tf.Rotation = {selobj->TF.Rotation.X + 90, selobj->TF.Rotation.Y, selobj->TF.Rotation.Z}; tf.Rotation = {selobj->TF.Rotation.X + 90, selobj->TF.Rotation.Y, selobj->TF.Rotation.Z};
glUniform4f(ObjColPos, 0, 0, 0.5, 1); glUniform4f(ObjColPos, 0, 0, 0.5, 1);
if (HoveredObjId == 3) if (HoveredObjId == 3)
glUniform4f(ObjColPos, 0, 0, 1, 1); glUniform4f(ObjColPos, 0, 0, 1, 1);
glUniform1ui(ObjIdPos, 3); glUniform1i(ObjIdPos, 3);
Scalar.Draw(tf, m_internalFramebuf->m_shader, VP); Scalar.Draw(tf, m_internalFramebuf->m_shader, VP);
glUniform4f(ObjColPos, 1, 1, 1, 1); glUniform4f(ObjColPos, 1, 1, 1, 1);
@ -457,21 +457,21 @@ void MainViewport::Draw() {
glUniform4f(ObjColPos, 0.5, 0, 0, 1); glUniform4f(ObjColPos, 0.5, 0, 0, 1);
if (HoveredObjId == 1) if (HoveredObjId == 1)
glUniform4f(ObjColPos, 1, 0, 0, 1); glUniform4f(ObjColPos, 1, 0, 0, 1);
glUniform1ui(ObjIdPos, 1); glUniform1i(ObjIdPos, 1);
Rotator.Draw(tf, m_internalFramebuf->m_shader, VP); Rotator.Draw(tf, m_internalFramebuf->m_shader, VP);
tf.Rotation = {0, 0, 0}; tf.Rotation = {0, 0, 0};
glUniform4f(ObjColPos, 0, 0.5, 0, 1); glUniform4f(ObjColPos, 0, 0.5, 0, 1);
if (HoveredObjId == 2) if (HoveredObjId == 2)
glUniform4f(ObjColPos, 0, 1, 0, 1); glUniform4f(ObjColPos, 0, 1, 0, 1);
glUniform1ui(ObjIdPos, 2); glUniform1i(ObjIdPos, 2);
Rotator.Draw(tf, m_internalFramebuf->m_shader, VP); Rotator.Draw(tf, m_internalFramebuf->m_shader, VP);
tf.Rotation = {90, 0, 0}; tf.Rotation = {90, 0, 0};
glUniform4f(ObjColPos, 0, 0, 0.5, 1); glUniform4f(ObjColPos, 0, 0, 0.5, 1);
if (HoveredObjId == 3) if (HoveredObjId == 3)
glUniform4f(ObjColPos, 0, 0, 1, 1); glUniform4f(ObjColPos, 0, 0, 1, 1);
glUniform1ui(ObjIdPos, 3); glUniform1i(ObjIdPos, 3);
Rotator.Draw(tf, m_internalFramebuf->m_shader, VP); Rotator.Draw(tf, m_internalFramebuf->m_shader, VP);
glUniform4f(ObjColPos, 1, 1, 1, 1); glUniform4f(ObjColPos, 1, 1, 1, 1);
@ -544,9 +544,9 @@ void MainViewport::HandleInput(InputEvent event) {
glBindFramebuffer(GL_FRAMEBUFFER, m_internalFramebuf->getId()); glBindFramebuffer(GL_FRAMEBUFFER, m_internalFramebuf->getId());
glReadBuffer(GL_COLOR_ATTACHMENT1); glReadBuffer(GL_COLOR_ATTACHMENT1);
unsigned int obj = 0; int obj = 0;
glReadPixels(x, y, 1, 1, GL_RED_INTEGER, GL_UNSIGNED_INT, &obj); glReadPixels(x, y, 1, 1, GL_RED_INTEGER, GL_INT, &obj);
if (obj < 16) { if (obj < 16) {
@ -652,9 +652,9 @@ void MainViewport::HandleInput(InputEvent event) {
glBindFramebuffer(GL_FRAMEBUFFER, m_internalFramebuf->getId()); glBindFramebuffer(GL_FRAMEBUFFER, m_internalFramebuf->getId());
glReadBuffer(GL_COLOR_ATTACHMENT1); glReadBuffer(GL_COLOR_ATTACHMENT1);
unsigned int obj = 0; int obj = 0;
glReadPixels(x, y, 1, 1, GL_RED_INTEGER, GL_UNSIGNED_INT, &obj); glReadPixels(x, y, 1, 1, GL_RED_INTEGER, GL_INT, &obj);
if (CurrentGizmoType == Move) { if (CurrentGizmoType == Move) {
if (SpecialObjCur == 0) { if (SpecialObjCur == 0) {