You need to sign in or sign up before continuing.
提交 ed0f5569 编写于 作者: D dcherepanov

7168550: [macosx] duplicate OGL context state changes related to vertex cache

Reviewed-by: bae, swingler
上级 4a6c6b7b
...@@ -204,7 +204,8 @@ JNF_COCOA_ENTER(env); ...@@ -204,7 +204,8 @@ JNF_COCOA_ENTER(env);
if (!CGLSD_MakeCurrentToScratch(env, oglc)) { if (!CGLSD_MakeCurrentToScratch(env, oglc)) {
return NULL; return NULL;
} }
} else if ([NSOpenGLContext currentContext] == nil) { // make sure our context is current
} else if ([NSOpenGLContext currentContext] != ctxinfo->context) {
[ctxinfo->context makeCurrentContext]; [ctxinfo->context makeCurrentContext];
} }
......
...@@ -84,6 +84,7 @@ typedef struct { ...@@ -84,6 +84,7 @@ typedef struct {
GLdouble *xformMatrix; GLdouble *xformMatrix;
GLuint blitTextureID; GLuint blitTextureID;
GLint textureFunction; GLint textureFunction;
jboolean vertexCacheEnabled;
} OGLContext; } OGLContext;
/** /**
......
...@@ -202,11 +202,6 @@ OGLTR_InitGlyphCache(jboolean lcdCache) ...@@ -202,11 +202,6 @@ OGLTR_InitGlyphCache(jboolean lcdCache)
J2dTraceLn(J2D_TRACE_INFO, "OGLTR_InitGlyphCache"); J2dTraceLn(J2D_TRACE_INFO, "OGLTR_InitGlyphCache");
// init vertex cache (if it hasn't been already)
if (!OGLVertexCache_InitVertexCache()) {
return JNI_FALSE;
}
// init glyph cache data structure // init glyph cache data structure
gcinfo = AccelGlyphCache_Init(OGLTR_CACHE_WIDTH, gcinfo = AccelGlyphCache_Init(OGLTR_CACHE_WIDTH,
OGLTR_CACHE_HEIGHT, OGLTR_CACHE_HEIGHT,
...@@ -583,6 +578,10 @@ OGLTR_EnableGlyphVertexCache(OGLContext *oglc) ...@@ -583,6 +578,10 @@ OGLTR_EnableGlyphVertexCache(OGLContext *oglc)
{ {
J2dTraceLn(J2D_TRACE_INFO, "OGLTR_EnableGlyphVertexCache"); J2dTraceLn(J2D_TRACE_INFO, "OGLTR_EnableGlyphVertexCache");
if (!OGLVertexCache_InitVertexCache(oglc)) {
return;
}
if (glyphCache == NULL) { if (glyphCache == NULL) {
if (!OGLTR_InitGlyphCache(JNI_FALSE)) { if (!OGLTR_InitGlyphCache(JNI_FALSE)) {
return; return;
......
...@@ -67,29 +67,31 @@ static jint maskCacheIndex = 0; ...@@ -67,29 +67,31 @@ static jint maskCacheIndex = 0;
} while (0) } while (0)
jboolean jboolean
OGLVertexCache_InitVertexCache() OGLVertexCache_InitVertexCache(OGLContext *oglc)
{ {
J2dTraceLn(J2D_TRACE_INFO, "OGLVertexCache_InitVertexCache"); J2dTraceLn(J2D_TRACE_INFO, "OGLVertexCache_InitVertexCache");
if (vertexCache != NULL) {
return JNI_TRUE;
}
vertexCache = (J2DVertex *)malloc(OGLVC_MAX_INDEX * sizeof(J2DVertex));
if (vertexCache == NULL) { if (vertexCache == NULL) {
return JNI_FALSE; vertexCache = (J2DVertex *)malloc(OGLVC_MAX_INDEX * sizeof(J2DVertex));
if (vertexCache == NULL) {
return JNI_FALSE;
}
} }
j2d_glTexCoordPointer(2, GL_FLOAT, if (!oglc->vertexCacheEnabled) {
sizeof(J2DVertex), vertexCache); j2d_glTexCoordPointer(2, GL_FLOAT,
j2d_glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(J2DVertex), vertexCache);
sizeof(J2DVertex), ((jfloat *)vertexCache) + 2); j2d_glColorPointer(4, GL_UNSIGNED_BYTE,
j2d_glVertexPointer(2, GL_FLOAT, sizeof(J2DVertex), ((jfloat *)vertexCache) + 2);
sizeof(J2DVertex), ((jfloat *)vertexCache) + 3); j2d_glVertexPointer(2, GL_FLOAT,
sizeof(J2DVertex), ((jfloat *)vertexCache) + 3);
j2d_glEnableClientState(GL_TEXTURE_COORD_ARRAY); j2d_glEnableClientState(GL_TEXTURE_COORD_ARRAY);
j2d_glEnableClientState(GL_COLOR_ARRAY); j2d_glEnableClientState(GL_COLOR_ARRAY);
j2d_glEnableClientState(GL_VERTEX_ARRAY); j2d_glEnableClientState(GL_VERTEX_ARRAY);
oglc->vertexCacheEnabled = JNI_TRUE;
}
return JNI_TRUE; return JNI_TRUE;
} }
...@@ -149,10 +151,6 @@ OGLVertexCache_InitMaskCache() ...@@ -149,10 +151,6 @@ OGLVertexCache_InitMaskCache()
{ {
J2dTraceLn(J2D_TRACE_INFO, "OGLVertexCache_InitMaskCache"); J2dTraceLn(J2D_TRACE_INFO, "OGLVertexCache_InitMaskCache");
if (!OGLVertexCache_InitVertexCache()) {
return JNI_FALSE;
}
maskCacheTexID = maskCacheTexID =
OGLContext_CreateBlitTexture(GL_INTENSITY8, GL_LUMINANCE, OGLContext_CreateBlitTexture(GL_INTENSITY8, GL_LUMINANCE,
OGLVC_MASK_CACHE_WIDTH_IN_TEXELS, OGLVC_MASK_CACHE_WIDTH_IN_TEXELS,
...@@ -179,6 +177,10 @@ OGLVertexCache_EnableMaskCache(OGLContext *oglc) ...@@ -179,6 +177,10 @@ OGLVertexCache_EnableMaskCache(OGLContext *oglc)
{ {
J2dTraceLn(J2D_TRACE_INFO, "OGLVertexCache_EnableMaskCache"); J2dTraceLn(J2D_TRACE_INFO, "OGLVertexCache_EnableMaskCache");
if (!OGLVertexCache_InitVertexCache(oglc)) {
return;
}
if (maskCacheTexID == 0) { if (maskCacheTexID == 0) {
if (!OGLVertexCache_InitMaskCache()) { if (!OGLVertexCache_InitMaskCache()) {
return; return;
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
/** /**
* Exported methods. * Exported methods.
*/ */
jboolean OGLVertexCache_InitVertexCache(); jboolean OGLVertexCache_InitVertexCache(OGLContext *oglc);
void OGLVertexCache_FlushVertexCache(); void OGLVertexCache_FlushVertexCache();
void OGLVertexCache_RestoreColorState(OGLContext *oglc); void OGLVertexCache_RestoreColorState(OGLContext *oglc);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册