< prev index next > src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/EncoderManager.m
Print this page
// Persistent encoder properties
id<MTLTexture> _destination;
SurfaceRasterFlags _dstFlags;
- jboolean _isAA;
-
//
// Cached 'mutable' states of encoder
//
// Composite rule and source raster flags (it affects the CAD-multipliers (of pipelineState))
// Paint mode (it affects shaders (of pipelineState) and corresponding buffers)
MTLPaint * _paint;
// If true, indicates that encoder is used for texture drawing (user must do [encoder setFragmentTexture:] before drawing)
jboolean _isTexture;
! int _interpolationMode;
// Clip rect or stencil
MTLClip * _clip;
// Transform (affects transformation inside vertex shader)
// Paint mode (it affects shaders (of pipelineState) and corresponding buffers)
MTLPaint * _paint;
// If true, indicates that encoder is used for texture drawing (user must do [encoder setFragmentTexture:] before drawing)
jboolean _isTexture;
! jboolean _isAA;
// Clip rect or stencil
MTLClip * _clip;
// Transform (affects transformation inside vertex shader)
- (void)updateEncoder:(id<MTLRenderCommandEncoder>)encoder
paint:(MTLPaint *)paint
composite:(MTLComposite *)composite
isTexture:(jboolean)isTexture
- interpolation:(int)interpolation
isAA:(jboolean)isAA
srcFlags:(const SurfaceRasterFlags * _Nullable)srcFlags
clip:(MTLClip *)clip
transform:(MTLTransform *)transform
forceUpdate:(jboolean)forceUpdate
[self updatePipelineState:encoder
paint:paint
composite:composite
isStencilUsed:[clip isShape]
isTexture:isTexture
- interpolation:interpolation
isAA:isAA
srcFlags:srcFlags
forceUpdate:forceUpdate];
[self updateTransform:encoder transform:transform forceUpdate:forceUpdate];
[self updateClip:encoder clip:clip forceUpdate:forceUpdate];
- (void)updatePipelineState:(id<MTLRenderCommandEncoder>)encoder
paint:(MTLPaint *)paint
composite:(MTLComposite *)composite
isStencilUsed:(jboolean)isStencilUsed
isTexture:(jboolean)isTexture
- interpolation:(int)interpolation
isAA:(jboolean)isAA
srcFlags:(const SurfaceRasterFlags * _Nullable)srcFlags
forceUpdate:(jboolean)forceUpdate
{
if (srcFlags == NULL)
srcFlags = &defaultRasterFlags;
if (!forceUpdate
&& [_paint isEqual:paint]
&& [_composite isEqual:composite]
! && (_isTexture == isTexture && (!isTexture || _interpolationMode == interpolation)) // interpolation is used only in texture mode
&& _isAA == isAA
&& _srcFlags.isOpaque == srcFlags->isOpaque && _srcFlags.isPremultiplied == srcFlags->isPremultiplied)
return;
[_paint copyFrom:paint];
[_composite copyFrom:composite];
_isTexture = isTexture;
- _interpolationMode = interpolation;
_isAA = isAA;
_srcFlags = *srcFlags;
if ((jint)[composite getCompositeState] == sun_java2d_SunGraphics2D_COMP_XOR) {
[paint setXorModePipelineState:encoder
composite:_composite
isStencilUsed:isStencilUsed
isTexture:_isTexture
- interpolation:interpolation
srcFlags:&_srcFlags
dstFlags:&_dstFlags
pipelineStateStorage:_pipelineStateStorage];
} else {
[paint setPipelineState:encoder
composite:_composite
isStencilUsed:isStencilUsed
isTexture:_isTexture
- interpolation:interpolation
isAA:isAA
srcFlags:&_srcFlags
dstFlags:&_dstFlags
pipelineStateStorage:_pipelineStateStorage];
}
- (void)updatePipelineState:(id<MTLRenderCommandEncoder>)encoder
paint:(MTLPaint *)paint
composite:(MTLComposite *)composite
isStencilUsed:(jboolean)isStencilUsed
isTexture:(jboolean)isTexture
isAA:(jboolean)isAA
srcFlags:(const SurfaceRasterFlags * _Nullable)srcFlags
forceUpdate:(jboolean)forceUpdate
{
if (srcFlags == NULL)
srcFlags = &defaultRasterFlags;
if (!forceUpdate
&& [_paint isEqual:paint]
&& [_composite isEqual:composite]
! && _isTexture == isTexture
&& _isAA == isAA
&& _srcFlags.isOpaque == srcFlags->isOpaque && _srcFlags.isPremultiplied == srcFlags->isPremultiplied)
return;
[_paint copyFrom:paint];
[_composite copyFrom:composite];
_isTexture = isTexture;
_isAA = isAA;
_srcFlags = *srcFlags;
if ((jint)[composite getCompositeState] == sun_java2d_SunGraphics2D_COMP_XOR) {
[paint setXorModePipelineState:encoder
composite:_composite
isStencilUsed:isStencilUsed
isTexture:_isTexture
srcFlags:&_srcFlags
dstFlags:&_dstFlags
pipelineStateStorage:_pipelineStateStorage];
} else {
[paint setPipelineState:encoder
composite:_composite
isStencilUsed:isStencilUsed
isTexture:_isTexture
isAA:isAA
srcFlags:&_srcFlags
dstFlags:&_dstFlags
pipelineStateStorage:_pipelineStateStorage];
}
- (id<MTLRenderCommandEncoder> _Nonnull)getAARenderEncoder:(const BMTLSDOps * _Nonnull)dstOps {
id<MTLTexture> dstTxt = dstOps->pTexture;
return [self getEncoder:dstTxt
isOpaque:dstOps->isOpaque
isTexture:JNI_FALSE
- interpolation:INTERPOLATION_NEAREST_NEIGHBOR
isAA:JNI_TRUE
srcFlags:NULL];
}
- (id<MTLRenderCommandEncoder> _Nonnull)getRenderEncoder:(id<MTLTexture> _Nonnull)dest
isDstOpaque:(bool)isOpaque
{
return [self getEncoder:dest
isOpaque:isOpaque
isTexture:JNI_FALSE
- interpolation:INTERPOLATION_NEAREST_NEIGHBOR
isAA:JNI_FALSE
srcFlags:NULL];
}
- (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(const BMTLSDOps * _Nonnull)dstOps
isSrcOpaque:(bool)isSrcOpaque
{
! return [self getTextureEncoder:dstOps->pTexture
- isSrcOpaque:isSrcOpaque
- isDstOpaque:dstOps->isOpaque
- interpolation:INTERPOLATION_NEAREST_NEIGHBOR];
- }
-
- - (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(id<MTLTexture> _Nonnull)dest
- isSrcOpaque:(bool)isSrcOpaque
- isDstOpaque:(bool)isDstOpaque
- {
- return [self getTextureEncoder:dest
- isSrcOpaque:isSrcOpaque
- isDstOpaque:isDstOpaque
- interpolation:INTERPOLATION_NEAREST_NEIGHBOR
- isAA:JNI_FALSE];
}
- (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(id<MTLTexture> _Nonnull)dest
isSrcOpaque:(bool)isSrcOpaque
isDstOpaque:(bool)isDstOpaque
- interpolation:(int)interpolation
isAA:(jboolean)isAA
{
SurfaceRasterFlags srcFlags = { isSrcOpaque, JNI_TRUE };
return [self getEncoder:dest
isOpaque:isDstOpaque
isTexture:JNI_TRUE
- interpolation:interpolation
isAA:isAA
srcFlags:&srcFlags];
}
- (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(id<MTLTexture> _Nonnull)dest
isSrcOpaque:(bool)isSrcOpaque
isDstOpaque:(bool)isDstOpaque
- interpolation:(int)interpolation
{
! return [self getTextureEncoder:dest isSrcOpaque:isSrcOpaque isDstOpaque:isDstOpaque interpolation:interpolation isAA:JNI_FALSE];
}
- (id<MTLRenderCommandEncoder> _Nonnull)
getEncoder:(id<MTLTexture> _Nonnull)dest
isOpaque:(jboolean)isOpaque
isTexture:(jboolean)isTexture
- interpolation:(int)interpolation
isAA:(jboolean)isAA
srcFlags:(const SurfaceRasterFlags *_Nullable)srcFlags {
//
// 1. check whether it's necessary to call endEncoder
//
- (id<MTLRenderCommandEncoder> _Nonnull)getAARenderEncoder:(const BMTLSDOps * _Nonnull)dstOps {
id<MTLTexture> dstTxt = dstOps->pTexture;
return [self getEncoder:dstTxt
isOpaque:dstOps->isOpaque
isTexture:JNI_FALSE
isAA:JNI_TRUE
srcFlags:NULL];
}
- (id<MTLRenderCommandEncoder> _Nonnull)getRenderEncoder:(id<MTLTexture> _Nonnull)dest
isDstOpaque:(bool)isOpaque
{
return [self getEncoder:dest
isOpaque:isOpaque
isTexture:JNI_FALSE
isAA:JNI_FALSE
srcFlags:NULL];
}
- (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(const BMTLSDOps * _Nonnull)dstOps
isSrcOpaque:(bool)isSrcOpaque
{
! return [self getTextureEncoder:dstOps->pTexture isSrcOpaque:isSrcOpaque isDstOpaque:dstOps->isOpaque];
}
- (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(id<MTLTexture> _Nonnull)dest
isSrcOpaque:(bool)isSrcOpaque
isDstOpaque:(bool)isDstOpaque
isAA:(jboolean)isAA
{
SurfaceRasterFlags srcFlags = { isSrcOpaque, JNI_TRUE };
return [self getEncoder:dest
isOpaque:isDstOpaque
isTexture:JNI_TRUE
isAA:isAA
srcFlags:&srcFlags];
}
- (id<MTLRenderCommandEncoder> _Nonnull) getTextureEncoder:(id<MTLTexture> _Nonnull)dest
isSrcOpaque:(bool)isSrcOpaque
isDstOpaque:(bool)isDstOpaque
{
! return [self getTextureEncoder:dest isSrcOpaque:isSrcOpaque isDstOpaque:isDstOpaque isAA:JNI_FALSE];
}
- (id<MTLRenderCommandEncoder> _Nonnull)
getEncoder:(id<MTLTexture> _Nonnull)dest
isOpaque:(jboolean)isOpaque
isTexture:(jboolean)isTexture
isAA:(jboolean)isAA
srcFlags:(const SurfaceRasterFlags *_Nullable)srcFlags {
//
// 1. check whether it's necessary to call endEncoder
//
//
[_encoderStates updateEncoder:_encoder
paint:_mtlc.paint
composite:_mtlc.composite
isTexture:isTexture
- interpolation:interpolation
isAA:isAA
srcFlags:srcFlags
clip:_mtlc.clip
transform:_mtlc.transform
forceUpdate:forceUpdate];
NSUInteger _w = _destination.width;
NSUInteger _h = _destination.height;
_encoder = [self getTextureEncoder:_destination
isSrcOpaque:JNI_FALSE
isDstOpaque:JNI_TRUE
- interpolation:INTERPOLATION_NEAREST_NEIGHBOR
isAA:JNI_TRUE];
struct TxtVertex quadTxVerticesBuffer[] = {
{{0, 0}, {0, 0}},
{{0,_h}, {0, 1}},
< prev index next >