1
0

Add GraphicPBO class

This commit is contained in:
otya128
2016-12-17 17:50:44 +09:00
parent 4eb2f4923d
commit af524152ab
2 changed files with 122 additions and 16 deletions

View File

@@ -25,7 +25,6 @@ class Graphic
{ {
width = w; width = w;
height = h; height = h;
initGraphicPages();
} }
void getSize(out int w, out int h) void getSize(out int w, out int h)
{ {
@@ -34,14 +33,7 @@ class Graphic
} }
void initGraphicPages() void initGraphicPages()
{ {
if (GRP.length != 0 && GRP[0].glTexture/*TODO:gl texture 0?*/) if (GRP.length == 0)
{
foreach(g; GRP)
{
g.deleteGL();
}
}
else
{ {
GRP = new GraphicPage[6]; GRP = new GraphicPage[6];
} }
@@ -51,11 +43,6 @@ class Graphic
} }
GRP[4] = createGRPF(petitcom.spriteFile); GRP[4] = createGRPF(petitcom.spriteFile);
GRP[5] = createGRPF(petitcom.BGFile); GRP[5] = createGRPF(petitcom.BGFile);
foreach(g; GRP)
{
g.createTexture(petitcom.renderer, petitcom.textureScaleMode);
g.createBuffer();
}
} }
GraphicPage createGRPF(string file) GraphicPage createGRPF(string file)
{ {
@@ -147,7 +134,6 @@ class Graphic
} }
@property void useGRP(int page) @property void useGRP(int page)
{ {
glBindFramebufferEXT(GL_FRAMEBUFFER, this.GRP[page].buffer);
usePage[petitcom.displaynum] = page; usePage[petitcom.displaynum] = page;
} }
@property void showGRP(int page) @property void showGRP(int page)
@@ -409,6 +395,29 @@ class GraphicFBO : Graphic
{ {
super(p); super(p);
} }
override void initGraphicPages()
{
foreach(g; GRP)
{
if (g.glTexture)
g.deleteGL();
}
super.initGraphicPages();
foreach(g; GRP)
{
g.createTexture(petitcom.renderer, petitcom.textureScaleMode);
g.createBuffer();
}
}
override @property void useGRP(int page)
{
glBindFramebufferEXT(GL_FRAMEBUFFER, this.GRP[page].buffer);
}
override @property int useGRP()
{
return super.useGRP;
}
//(x+r,y):0° //(x+r,y):0°
//(x,y+r):90° //(x,y+r):90°
void drawCircle(int x, int y, int r, int startr, int endr, int flag) void drawCircle(int x, int y, int r, int startr, int endr, int flag)
@@ -721,3 +730,98 @@ class GraphicFBO : Graphic
gload(x, y, w, h, cast(int[])paint.buffer, 0, copymode); gload(x, y, w, h, cast(int[])paint.buffer, 0, copymode);
} }
} }
class GraphicPBO : Graphic
{
this(PetitComputer p)
{
super(p);
}
override void initGraphicPages()
{
foreach(g; GRP)
{
if (g.glTexture)
g.deleteGL();
}
super.initGraphicPages();
foreach(g; GRP)
{
g.createTexture(petitcom.renderer, petitcom.textureScaleMode);
g.createBuffer();
}
}
override void initVM()
{
}
override void display(int display)
{
}
override void updateVM()
{
}
override void gpset(int page, int x, int y, uint color)
{
}
override void gline(int page, int x, int y, int x2, int y2, uint color)
{
}
override void gbox(int page, int x, int y, int x2, int y2, uint color)
{
}
override void gfill(int page, int x, int y, int x2, int y2, uint color)
{
}
override void gcls(int page, uint color)
{
}
override void gpaint(int page, int x, int y, uint color)
{
}
override void gcircle(int page, int x, int y, int r, uint color)
{
}
override void gcircle(int page, int x, int y, int r, int startr, int endr, int flag, uint color)
{
}
override void gputchr(int page, int x, int y, int text, int scalex, int scaley, uint color)
{
}
override void gputchr(int page, int x, int y, wstring text, int scalex, int scaley, uint color)
{
}
override int gspoit(int page, int x, int y)
{
return 0;
}
override void gsave(int savepage, int x, int y, int w, int h, double[] array, int flag)
{
}
override void gsave(int savepage, int x, int y, int w, int h, int[] array, int flag)
{
}
override void gload(int x, int y, int w, int h, int[] array, int flag, int copymode)
{
}
override void gload(int x, int y, int w, int h, double[] array, int flag, int copymode)
{
}
}

View File

@@ -475,11 +475,13 @@ class PetitComputer
if (grpw != 1024 || grph != 1024) if (grpw != 1024 || grph != 1024)
{ {
graphic.setSize(1024, 1024); graphic.setSize(1024, 1024);
graphic.initGraphicPages();
} }
} }
else if (grpw != 512 || grph != 512) else if (grpw != 512 || grph != 512)
{ {
graphic.setSize(512, 512); graphic.setSize(512, 512);
graphic.initGraphicPages();
} }
displaynum = 0; displaynum = 0;
console.changeDisplay(currentDisplay); console.changeDisplay(currentDisplay);
@@ -924,7 +926,7 @@ class PetitComputer
slot = new Slot[5]; slot = new Slot[5];
keybuffer = new Key[128]; keybuffer = new Key[128];
init(); init();
graphic = new GraphicFBO(this); graphic = new GraphicPBO(this);
keybuffermutex = new Mutex(); keybuffermutex = new Mutex();
grpmutex = new Mutex(); grpmutex = new Mutex();
sprite = new Sprite(this); sprite = new Sprite(this);