renderGL1: more texture fixes
This commit is contained in:
parent
20e7c4633d
commit
a793f286c5
|
|
@ -239,7 +239,7 @@ void FurnaceGUI::drawChanOsc() {
|
||||||
|
|
||||||
ImVec2 gradLeft=ImGui::GetCursorPos();
|
ImVec2 gradLeft=ImGui::GetCursorPos();
|
||||||
ImVec2 gradSize=ImVec2(400.0f*dpiScale,400.0f*dpiScale);
|
ImVec2 gradSize=ImVec2(400.0f*dpiScale,400.0f*dpiScale);
|
||||||
ImGui::Image(rend->getTextureID(chanOscGradTex),gradSize);
|
ImGui::Image(rend->getTextureID(chanOscGradTex),gradSize,ImVec2(0,0),ImVec2(rend->getTextureU(chanOscGradTex),rend->getTextureV(chanOscGradTex)));
|
||||||
ImVec2 gradLeftAbs=ImGui::GetItemRectMin();
|
ImVec2 gradLeftAbs=ImGui::GetItemRectMin();
|
||||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||||
if (chanOscGrad.points.size()<32) {
|
if (chanOscGrad.points.size()<32) {
|
||||||
|
|
|
||||||
|
|
@ -1426,6 +1426,8 @@ enum FurnaceGUIBlendMode {
|
||||||
class FurnaceGUIRender {
|
class FurnaceGUIRender {
|
||||||
public:
|
public:
|
||||||
virtual ImTextureID getTextureID(FurnaceGUITexture* which);
|
virtual ImTextureID getTextureID(FurnaceGUITexture* which);
|
||||||
|
virtual float getTextureU(FurnaceGUITexture* which);
|
||||||
|
virtual float getTextureV(FurnaceGUITexture* which);
|
||||||
virtual bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
virtual bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
||||||
virtual bool unlockTexture(FurnaceGUITexture* which);
|
virtual bool unlockTexture(FurnaceGUITexture* which);
|
||||||
virtual bool updateTexture(FurnaceGUITexture* which, void* data, int pitch);
|
virtual bool updateTexture(FurnaceGUITexture* which, void* data, int pitch);
|
||||||
|
|
|
||||||
|
|
@ -63,10 +63,13 @@ void FurnaceGUI::drawImage(ImDrawList* dl, FurnaceGUIImages image, const ImVec2&
|
||||||
posAbs.y+rectMin.x*sin(rotate)+rectMax.y*cos(rotate)
|
posAbs.y+rectMin.x*sin(rotate)+rectMax.y*cos(rotate)
|
||||||
);
|
);
|
||||||
|
|
||||||
ImVec2 uv0=ImVec2(uvMin.x,uvMin.y);
|
float uScale=rend->getTextureU(img);
|
||||||
ImVec2 uv1=ImVec2(uvMax.x,uvMin.y);
|
float vScale=rend->getTextureV(img);
|
||||||
ImVec2 uv2=ImVec2(uvMax.x,uvMax.y);
|
|
||||||
ImVec2 uv3=ImVec2(uvMin.x,uvMax.y);
|
ImVec2 uv0=ImVec2(uvMin.x*uScale,uvMin.y*vScale);
|
||||||
|
ImVec2 uv1=ImVec2(uvMax.x*uScale,uvMin.y*vScale);
|
||||||
|
ImVec2 uv2=ImVec2(uvMax.x*uScale,uvMax.y*vScale);
|
||||||
|
ImVec2 uv3=ImVec2(uvMin.x*uScale,uvMax.y*vScale);
|
||||||
|
|
||||||
ImU32 colorConverted=ImGui::GetColorU32(imgColor);
|
ImU32 colorConverted=ImGui::GetColorU32(imgColor);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,14 @@ ImTextureID FurnaceGUIRender::getTextureID(FurnaceGUITexture* which) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float FurnaceGUIRender::getTextureU(FurnaceGUITexture* which) {
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float FurnaceGUIRender::getTextureV(FurnaceGUITexture* which) {
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRender::lockTexture(FurnaceGUITexture* which, void** data, int* pitch) {
|
bool FurnaceGUIRender::lockTexture(FurnaceGUITexture* which, void** data, int* pitch) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,13 +44,23 @@ ImTextureID FurnaceGUIRenderGL1::getTextureID(FurnaceGUITexture* which) {
|
||||||
return (ImTextureID)ret;
|
return (ImTextureID)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float FurnaceGUIRenderGL1::getTextureU(FurnaceGUITexture* which) {
|
||||||
|
FurnaceGL1Texture* t=(FurnaceGL1Texture*)which;
|
||||||
|
return (float)t->width/(float)t->widthReal;
|
||||||
|
}
|
||||||
|
|
||||||
|
float FurnaceGUIRenderGL1::getTextureV(FurnaceGUITexture* which) {
|
||||||
|
FurnaceGL1Texture* t=(FurnaceGL1Texture*)which;
|
||||||
|
return (float)t->height/(float)t->heightReal;
|
||||||
|
}
|
||||||
|
|
||||||
bool FurnaceGUIRenderGL1::lockTexture(FurnaceGUITexture* which, void** data, int* pitch) {
|
bool FurnaceGUIRenderGL1::lockTexture(FurnaceGUITexture* which, void** data, int* pitch) {
|
||||||
FurnaceGL1Texture* t=(FurnaceGL1Texture*)which;
|
FurnaceGL1Texture* t=(FurnaceGL1Texture*)which;
|
||||||
if (t->lockedData!=NULL) return false;
|
if (t->lockedData!=NULL) return false;
|
||||||
t->lockedData=new unsigned char[t->width*t->height*4];
|
t->lockedData=new unsigned char[t->widthReal*t->heightReal*4];
|
||||||
|
|
||||||
*data=t->lockedData;
|
*data=t->lockedData;
|
||||||
*pitch=t->width*4;
|
*pitch=t->widthReal*4;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -59,7 +69,7 @@ bool FurnaceGUIRenderGL1::unlockTexture(FurnaceGUITexture* which) {
|
||||||
if (t->lockedData==NULL) return false;
|
if (t->lockedData==NULL) return false;
|
||||||
|
|
||||||
C(glBindTexture(GL_TEXTURE_2D,t->id));
|
C(glBindTexture(GL_TEXTURE_2D,t->id));
|
||||||
C(glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,t->width,t->height,0,GL_RGBA,GL_UNSIGNED_BYTE,t->lockedData));
|
C(glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,t->widthReal,t->heightReal,0,GL_RGBA,GL_UNSIGNED_BYTE,t->lockedData));
|
||||||
|
|
||||||
C(glFlush());
|
C(glFlush());
|
||||||
delete[] t->lockedData;
|
delete[] t->lockedData;
|
||||||
|
|
@ -73,8 +83,10 @@ bool FurnaceGUIRenderGL1::updateTexture(FurnaceGUITexture* which, void* data, in
|
||||||
|
|
||||||
if (t->width*4!=pitch) return false;
|
if (t->width*4!=pitch) return false;
|
||||||
|
|
||||||
|
logV("GL1 updateTexture...");
|
||||||
|
|
||||||
C(glBindTexture(GL_TEXTURE_2D,t->id));
|
C(glBindTexture(GL_TEXTURE_2D,t->id));
|
||||||
C(glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,t->width,t->height,0,GL_RGBA,GL_UNSIGNED_BYTE,data));
|
C(glTexSubImage2D(GL_TEXTURE_2D,0,0,0,t->width,t->height,GL_RGBA,GL_UNSIGNED_BYTE,data));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ class FurnaceGUIRenderGL1: public FurnaceGUIRender {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ImTextureID getTextureID(FurnaceGUITexture* which);
|
ImTextureID getTextureID(FurnaceGUITexture* which);
|
||||||
|
float getTextureU(FurnaceGUITexture* which);
|
||||||
|
float getTextureV(FurnaceGUITexture* which);
|
||||||
bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
||||||
bool unlockTexture(FurnaceGUITexture* which);
|
bool unlockTexture(FurnaceGUITexture* which);
|
||||||
bool updateTexture(FurnaceGUITexture* which, void* data, int pitch);
|
bool updateTexture(FurnaceGUITexture* which, void* data, int pitch);
|
||||||
|
|
|
||||||
|
|
@ -1589,7 +1589,7 @@ void FurnaceGUI::drawSampleEdit() {
|
||||||
updateSampleTex=false;
|
updateSampleTex=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::ImageButton(rend->getTextureID(sampleTex),avail,ImVec2(0,0),ImVec2(1,1),0);
|
ImGui::ImageButton(rend->getTextureID(sampleTex),avail,ImVec2(0,0),ImVec2(rend->getTextureU(sampleTex),rend->getTextureV(sampleTex)),0);
|
||||||
|
|
||||||
ImVec2 rectMin=ImGui::GetItemRectMin();
|
ImVec2 rectMin=ImGui::GetItemRectMin();
|
||||||
ImVec2 rectMax=ImGui::GetItemRectMax();
|
ImVec2 rectMax=ImGui::GetItemRectMax();
|
||||||
|
|
|
||||||
|
|
@ -843,7 +843,7 @@ void FurnaceGUI::drawTutorial() {
|
||||||
|
|
||||||
dl->AddRectFilled(ImVec2(0,0),ImVec2(canvasW,canvasH),0xff000000);
|
dl->AddRectFilled(ImVec2(0,0),ImVec2(canvasW,canvasH),0xff000000);
|
||||||
|
|
||||||
dl->AddImage(rend->getTextureID(cvTex),p0,p1);
|
dl->AddImage(rend->getTextureID(cvTex),p0,p1,ImVec2(0,0),ImVec2(rend->getTextureU(cvTex),rend->getTextureV(cvTex)));
|
||||||
|
|
||||||
if (mobileUI) {
|
if (mobileUI) {
|
||||||
dl->AddRect(dpadUpStart,dpadUpEnd,0xff0000ff,0,0,dpiScale);
|
dl->AddRect(dpadUpStart,dpadUpEnd,0xff0000ff,0,0,dpiScale);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue