1
0

Implement GSPOIT

This commit is contained in:
otya128
2016-12-12 22:34:25 +09:00
parent e51b8fa282
commit ab4dcc491f
2 changed files with 19 additions and 4 deletions

View File

@@ -534,6 +534,10 @@ class BuiltinFunction
throw new TypeMismatch("GPUTCHR", 3); throw new TypeMismatch("GPUTCHR", 3);
} }
} }
static int GSPOIT(PetitComputer p, int x, int y)
{
return p.graphic.gspoit(p.graphic.useGRP, x, y);
}
static void BGMPLAY(PetitComputer p, int music) static void BGMPLAY(PetitComputer p, int music)
{ {
} }

View File

@@ -429,8 +429,10 @@ class Graphic
{ {
SDL_GL_MakeCurrent(petitcom.window, petitcom.contextVM); SDL_GL_MakeCurrent(petitcom.window, petitcom.contextVM);
glAlphaFunc(GL_GEQUAL, 0.1f); glAlphaFunc(GL_GEQUAL, 0.1f);
glEnable(GL_ALPHA_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_DEPTH_TEST);
} }
void draw2() void draw2()
{ {
@@ -451,9 +453,6 @@ class Graphic
GLint old; GLint old;
int oldpage = drawMessageQueue[0].page; int oldpage = drawMessageQueue[0].page;
glBindFramebufferEXT(GL_FRAMEBUFFER, this.GRP[oldpage].buffer); glBindFramebufferEXT(GL_FRAMEBUFFER, this.GRP[oldpage].buffer);
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_DEPTH_TEST);
//glAlphaFunc(GL_GEQUAL, 0.0); //glAlphaFunc(GL_GEQUAL, 0.0);
void chScreen(int x, int y, int w, int h) void chScreen(int x, int y, int w, int h)
@@ -559,6 +558,9 @@ class Graphic
break; break;
default: default:
} }
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_DEPTH_TEST);
} }
DrawMessage[] drawMessageQueue = new DrawMessage[1]; DrawMessage[] drawMessageQueue = new DrawMessage[1];
int drawMessageLength; int drawMessageLength;
@@ -675,6 +677,15 @@ class Graphic
dm.display = cast(byte)petitcom.displaynum; dm.display = cast(byte)petitcom.displaynum;
sendDrawMessage(dm); sendDrawMessage(dm);
} }
int gspoit(int page, int x, int y)
{
glBindFramebufferEXT(GL_FRAMEBUFFER, this.GRP[page].buffer);
int ui;
//flush
updateVM();
glReadPixels(x, y, 1, 1, GRP[page].textureFormat, GL_UNSIGNED_BYTE, &ui);
return ui;
}
int gprio; int gprio;
void render() void render()
{ {