aboutsummaryrefslogtreecommitdiff
path: root/src/share/native/sun/java2d/opengl/OGLRenderQueue.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/native/sun/java2d/opengl/OGLRenderQueue.c')
-rw-r--r--src/share/native/sun/java2d/opengl/OGLRenderQueue.c103
1 files changed, 100 insertions, 3 deletions
diff --git a/src/share/native/sun/java2d/opengl/OGLRenderQueue.c b/src/share/native/sun/java2d/opengl/OGLRenderQueue.c
index 0ded24d51..ffd0ebcb4 100644
--- a/src/share/native/sun/java2d/opengl/OGLRenderQueue.c
+++ b/src/share/native/sun/java2d/opengl/OGLRenderQueue.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -88,8 +88,9 @@ Java_sun_java2d_opengl_OGLRenderQueue_flushBuffer
while (b < end) {
jint opcode = NEXT_INT(b);
- J2dTraceLn1(J2D_TRACE_VERBOSE,
- "OGLRenderQueue_flushBuffer: opcode=%d", opcode);
+ J2dTraceLn2(J2D_TRACE_VERBOSE,
+ "OGLRenderQueue_flushBuffer: opcode=%d, rem=%d",
+ opcode, (end-b));
switch (opcode) {
@@ -148,6 +149,40 @@ Java_sun_java2d_opengl_OGLRenderQueue_flushBuffer
SKIP_BYTES(b, count * BYTES_PER_SCANLINE);
}
break;
+ case sun_java2d_pipe_BufferedOpCodes_DRAW_PARALLELOGRAM:
+ {
+ jfloat x11 = NEXT_FLOAT(b);
+ jfloat y11 = NEXT_FLOAT(b);
+ jfloat dx21 = NEXT_FLOAT(b);
+ jfloat dy21 = NEXT_FLOAT(b);
+ jfloat dx12 = NEXT_FLOAT(b);
+ jfloat dy12 = NEXT_FLOAT(b);
+ jfloat lwr21 = NEXT_FLOAT(b);
+ jfloat lwr12 = NEXT_FLOAT(b);
+ OGLRenderer_DrawParallelogram(oglc,
+ x11, y11,
+ dx21, dy21,
+ dx12, dy12,
+ lwr21, lwr12);
+ }
+ break;
+ case sun_java2d_pipe_BufferedOpCodes_DRAW_AAPARALLELOGRAM:
+ {
+ jfloat x11 = NEXT_FLOAT(b);
+ jfloat y11 = NEXT_FLOAT(b);
+ jfloat dx21 = NEXT_FLOAT(b);
+ jfloat dy21 = NEXT_FLOAT(b);
+ jfloat dx12 = NEXT_FLOAT(b);
+ jfloat dy12 = NEXT_FLOAT(b);
+ jfloat lwr21 = NEXT_FLOAT(b);
+ jfloat lwr12 = NEXT_FLOAT(b);
+ OGLRenderer_DrawAAParallelogram(oglc, dstOps,
+ x11, y11,
+ dx21, dy21,
+ dx12, dy12,
+ lwr21, lwr12);
+ }
+ break;
// fill ops
case sun_java2d_pipe_BufferedOpCodes_FILL_RECT:
@@ -166,6 +201,34 @@ Java_sun_java2d_opengl_OGLRenderQueue_flushBuffer
SKIP_BYTES(b, count * BYTES_PER_SPAN);
}
break;
+ case sun_java2d_pipe_BufferedOpCodes_FILL_PARALLELOGRAM:
+ {
+ jfloat x11 = NEXT_FLOAT(b);
+ jfloat y11 = NEXT_FLOAT(b);
+ jfloat dx21 = NEXT_FLOAT(b);
+ jfloat dy21 = NEXT_FLOAT(b);
+ jfloat dx12 = NEXT_FLOAT(b);
+ jfloat dy12 = NEXT_FLOAT(b);
+ OGLRenderer_FillParallelogram(oglc,
+ x11, y11,
+ dx21, dy21,
+ dx12, dy12);
+ }
+ break;
+ case sun_java2d_pipe_BufferedOpCodes_FILL_AAPARALLELOGRAM:
+ {
+ jfloat x11 = NEXT_FLOAT(b);
+ jfloat y11 = NEXT_FLOAT(b);
+ jfloat dx21 = NEXT_FLOAT(b);
+ jfloat dy21 = NEXT_FLOAT(b);
+ jfloat dx12 = NEXT_FLOAT(b);
+ jfloat dy12 = NEXT_FLOAT(b);
+ OGLRenderer_FillAAParallelogram(oglc, dstOps,
+ x11, y11,
+ dx21, dy21,
+ dx12, dy12);
+ }
+ break;
// text-related ops
case sun_java2d_pipe_BufferedOpCodes_DRAW_GLYPH_LIST:
@@ -438,6 +501,31 @@ Java_sun_java2d_opengl_OGLRenderQueue_flushBuffer
dstOps = NULL;
}
break;
+ case sun_java2d_pipe_BufferedOpCodes_SAVE_STATE:
+ {
+ j2d_glPushAttrib(GL_ALL_ATTRIB_BITS);
+ j2d_glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS);
+ j2d_glMatrixMode(GL_MODELVIEW);
+ j2d_glPushMatrix();
+ j2d_glMatrixMode(GL_PROJECTION);
+ j2d_glPushMatrix();
+ j2d_glMatrixMode(GL_TEXTURE);
+ j2d_glPushMatrix();
+ }
+ break;
+
+ case sun_java2d_pipe_BufferedOpCodes_RESTORE_STATE:
+ {
+ j2d_glPopAttrib();
+ j2d_glPopClientAttrib();
+ j2d_glMatrixMode(GL_MODELVIEW);
+ j2d_glPopMatrix();
+ j2d_glMatrixMode(GL_PROJECTION);
+ j2d_glPopMatrix();
+ j2d_glMatrixMode(GL_TEXTURE);
+ j2d_glPopMatrix();
+ }
+ break;
case sun_java2d_pipe_BufferedOpCodes_SYNC:
{
sync = JNI_TRUE;
@@ -691,6 +779,9 @@ OGLRenderQueue_CheckPreviousOp(jint op)
return;
}
+ J2dTraceLn1(J2D_TRACE_VERBOSE,
+ "OGLRenderQueue_CheckPreviousOp: new op=%d", op);
+
switch (previousOp) {
case GL_TEXTURE_2D:
case GL_TEXTURE_RECTANGLE_ARB:
@@ -718,6 +809,9 @@ OGLRenderQueue_CheckPreviousOp(jint op)
case OGL_STATE_GLYPH_OP:
OGLTR_DisableGlyphVertexCache(oglc);
break;
+ case OGL_STATE_PGRAM_OP:
+ OGLRenderer_DisableAAParallelogramProgram();
+ break;
case OGL_STATE_RESET:
case OGL_STATE_CHANGE:
// No-op
@@ -745,6 +839,9 @@ OGLRenderQueue_CheckPreviousOp(jint op)
case OGL_STATE_GLYPH_OP:
OGLTR_EnableGlyphVertexCache(oglc);
break;
+ case OGL_STATE_PGRAM_OP:
+ OGLRenderer_EnableAAParallelogramProgram();
+ break;
case OGL_STATE_RESET:
case OGL_STATE_CHANGE:
// No-op