2012-12-18 49 views
0

我使用UIKit(簡化的)生成文本作爲圖像:GLKTextureLoader負載透明紋理出乎意料

UIGraphicsBeginImageContextWithOptions(textureSize, NO, 0); 
    [variant.text drawInRect:CGRectIntegral(necessaryRect) withFont:textFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter]; 
    UIImage *img = UIImagePNGRepresentation(UIGraphicsGetImageFromCurrentImageContext()); 
UIGraphicsEndImageContext(); 

然後我將其保存到高速緩存目錄和負載從文件與GLKTextureLoader-textureWithContentsOfFile:options:error:; options = nil)。

加載後,我看到「白色文物」 - 文字周圍的白色像素,尤其是在光線不直的時候(對紋理表面施加一些旋轉),尤其清晰可見。

我檢查生成的圖像 - 在圖像編輯器中打開它們&添加了黑色背景 - 除黑色之外,我看不到任何東西。然後我檢查了紋理 - 在文本的背後添加了一個紋理 - 只是填充了黑色。在我的3D對象上,我看到了文本字母周圍的「白色陰影」,就像一些邊框一樣。

effect.textrue2d0.envMode = GLKTextureEnvModeDecal; // just text 
... 
effect.texture2d0.envMode = GLKTextureEnvModeModulate; // black bg gexture + text 
effect.textrue2d1.envMode = GLKTextureEnvModeDecal; 
... 
glEnable(GL_BLEND); // always 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

如果我加載啓用GLKTextureLoaderApplyPremultiplication質感,問題是固定的,但文字看起來不那麼明顯的(使用像不是100%黑色)。

將底部貼圖(2d0)更改爲envModeGLKTextureEnvModeReplace也將修復白色像素,但會移除光線。

我在做什麼錯?

更新:

我最近寫我自己的着色器。沒有alpha預加載的紋理沒有問題。所以,我期望GLKit着色器本身存在問題。

回答

0

問題出在不同的EAGLContexts

GLKTextureLoader將字體加載到當前上下文([EAGLContext currentContext]),並從那裏正確顯示它。在我的應用程序(它使用2個不同的上下文),它是越野車:有時我加載在一個上下文中,並顯示在另一個(只是忘記在加載過程中更改它們)。