On Fri, 7 May 2021 19:44:31 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>> In dispose() we call validate which internally calls corresponding 
>> RenderQueue's of OpenGL/Metal, thats why it is not moved to CFLayer.
>> For other getters since initialization of peer was happening in individual 
>> subclasses(which in turn calls OpenGL/Metal native initialization) i had 
>> kept getters also in subclasses, but we can move getters to CFLayer. I have 
>> updated the PR.
>
> You can add a new abstract method to the parent class: getRenderQueue(), and 
> override it in subclasses to call MTLRenderQueue/OGL.getInstance(); In this 
> way, you can push to the parent more methods by calling just this new 
> getRenderQueue().
> 
> I think the only methods which cannot be pushe dto the parent is 
> replaceSurfaceData() due to insets usage.

I tried making this change.
Moved all methods except replaceSurfaceData() to CFLayer.java. Moved the jni 
native declaration also to CFlayer.java.
For this to link i need to change native JNI signatures also to map to CFLayer. 
But this will result in duplicate JNI symbols. If i change name of these native 
JNI calls to something like nativeMTL/CGLSetScale, i again have to use if/else 
check to verify which signature to call. Introducing a common native interface 
between MTLLayer.m and CGLLayer.m would not help because their implementation 
is different(Also it is out of scope of this PR).

I am not finding ways to move methods accessing native JNI calls to common 
CFLayer.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3851

Reply via email to