- void Copy(const Texture tex, Rect rect = null) const {
- if (rect is null) {
- rect = new Rect(0, 0, tex.width, tex.height);
- }
- int[4] vport;
- glGetIntegerv(GL_VIEWPORT, vport.ptr);
- glPushAttrib(GL_VIEWPORT_BIT);
- glViewport(0, 0, rect.width, rect.height);
- if (!glIsEnabled(GL_TEXTURE_2D)) {
- glCheck(glEnable(GL_TEXTURE_2D));
- }
- tex.Bind();
- glBegin(GL_QUADS);
- glTexCoord2f(1, 1); glVertex2f(rect.x, rect.y);
- glTexCoord2f(0, 1); glVertex2f(rect.x, rect.y + vport[3]);
- glTexCoord2f(0, 0); glVertex2f(rect.x + vport[2], rect.y + vport[3]);
- glTexCoord2f(1, 0); glVertex2f(rect.x + vport[2], rect.y);
- glEnd();
- this.Bind();
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0, rect.x, rect.y, 0, 0, rect.width, rect.height);
- glPopAttrib();
- }