MCPcopy Index your code
hub / github.com/JonaNorman/GLRenderClient

github.com/JonaNorman/GLRenderClient @0.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.2.0 ↗ · + Follow
2,194 symbols 4,941 edges 105 files 21 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

GLRenderClient

License

GLRenderClient

This is a lightweight OpenGL rendering library for Android development, dedicated to help Android developers to reduce development costs, forget the technical details of OpenGL, it can be used in the image editing, video editing.

Import

implementation('io.github.jonanorman.android:glrenderclient:0.2.0')
GLRenderMessage renderMessage = GLRenderMessage.obtain();
renderMessage.post(new Runnable() {
@Override
public void run() {
GLLayer layerGroup = new GLLayerGroup();
layerGroup.render(surfaceTexture);
}
});
renderMessage.recycle();

Feature

Feature1:Automatically parse shader parameters

There is no need to call different APIs to set different variables according to the type of parameters

GLShaderLayer shaderLayer = new GLShaderLayer(); 
shaderLayer.setShaderParam("viewSize", width,height);
shaderLayer.setShaderParam("inputTexture", textureId1);
shaderLayer.setShaderParam("inputTexture2", textureId2);
shaderLayer.setShaderParam("position", position);

Feature2: Asynchronously render Android native View

Render view async

GLViewLayer viewLayer = new GLViewLayer(getApplicationContext());
viewLayer.setBackgroundColor(Color.WHITE);
LayoutInflater layoutInflater = LayoutInflater.from(viewLayer.getContext());
View view = layoutInflater.inflate(R.layout.layout_view_layer, null);
viewLayer.addView(view);
viewLayer.render(surfaceTexture);

Feature3: multi-Layer multi-timeline render

multi-Layer

GLLayerGroup rootLayer = new GLLayerGroup();
rootLayer.setDuration(TimeStamp.ofMills(10000));
GLLayerGroup group = new GLLayerGroup();
group.setDuration(TimeStamp.ofMills(5000));
group.setStartTime(TimeStamp.ofMills(5000));
rootLayer.addLayer(group);
rootLayer.render(surfaceTexture);

Feature4: Effect

GLEffectGroup effectGroup = new GLEffectGroup();
GLShaderEffect shaderEffect =new GLShaderEffect();
shaderEffect.setVertexShaderCode(vertexCode);
shaderEffect.setFragmentShaderCode(fragmentCode);
effectGroup.add(shaderEffect);
GLShaderEffect shaderEffect1 =new GLShaderEffect();
shaderEffect1.setStartTime(TimeStamp.ofMills(2000));
shaderEffect1.setDuration(TimeStamp.ofMills(2000));
shaderEffect1.setVertexShaderCode(vertexCode1);
shaderEffect1.setFragmentShaderCode(fragmentCode2);
effectGroup.add(shaderEffect1);
layer.addEffect(effectGroup);
layer.render(surfaceTexture);

Feature5: shader keyframe

KeyframeSet keyframes = KeyframeSet.ofFloat(10000, 500, 1000, 0);
layer.setKeyframes(GLLayer.KEY_FRAMES_WIDTH, keyframes);
keyframes = KeyframeSet.ofFloat(10000, 500, 600, 500);
layer.setKeyframes(GLLayer.KEY_FRAMES_HEIGHT, keyframes);
layer.setKeyframes(shaderKey,  KeyframeSet.ofFloat(10000, 500, 1000, 0));

Feature6: View Effect

Add special effects to Android native View View Effect

<com.jonanorman.android.renderclient.view.GLEffectLayout
        android:id="@+id/effectView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <Button
                android:id="@+id/Button"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:text="click me">

            </Button>

        </FrameLayout>

    </com.jonanorman.android.renderclient.view.GLEffectLayout>
GLEffectLayout effectView = findViewById(R.id.effectView);
effectView.addEffect(new GLWobbleEffect());
effectView.enableRefreshMode();

Feature7: obj render

obj render

Feature8: GaussianBlurEffect

GaussianBlurEffect

GLGaussianBlurEffect gaussianBlurEffect = new GLGaussianBlurEffect();
gaussianBlurEffect.setBlurRadius(radius);
gaussianBlurEffect.setBlurStep(step);
gaussianBlurEffect.setBlurSigma(sigma);

Feature9: OutlineEffect

OutlineEffect

GLAlphaOutlineEffect outlineEffect = new GLAlphaOutlineEffect();
outlineEffect.setMaxOutlineWidth(maxWidth);
outlineEffect.setIntensity(intensity);
outlineEffect.setOutlineStyle(style);
outlineEffect.setOutlineColor(color);

Feature10: Solve OpenGL intractable diseases

1. Translucent objects are merged with black borders
2. The problem of texture and image upside down
3. The problem of image squashing when rotating
4. Use BlendMode to implement 15 native Xfermodes of Android
5. automatically check the success of each OpenGL command call
6. Program, Shader, Framebuffer caching  to help reduce memory
7. Support bitmaps that are not a power of 2 or a direct multiplication can also mipmap
8. Solve the problem of different screen size and texture ratio, increase GravityMode, ScaleMode

License

See the LICENSE file for details.

Extension points exported contracts — how you extend this code

OnDisposeListener (Interface)
(no doc) [8 implementers]
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLDispose.java
OnTouchListener (Interface)
(no doc) [6 implementers]
lib/src/main/java/com/jonanorman/android/renderclient/layer/GLLayer.java
OnRenderListener (Interface)
(no doc) [8 implementers]
lib/src/main/java/com/jonanorman/android/renderclient/layer/GLLayer.java
onFrameRenderCallback (Interface)
(no doc) [8 implementers]
lib/src/main/java/com/jonanorman/android/renderclient/view/GLSurfaceViewRender.java
onFrameRenderCallback (Interface)
(no doc) [8 implementers]
lib/src/main/java/com/jonanorman/android/renderclient/view/GLTextureViewRender.java

Core symbols most depended-on inside this repo

put
called by 187
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLProgram.java
onGLCallback
called by 179
lib/src/main/java/com/jonanorman/android/renderclient/opengl/gl20/GL20Command.java
get
called by 85
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLVariable.java
set
called by 56
lib/src/main/java/com/jonanorman/android/renderclient/layer/GLLayerGroup.java
add
called by 45
lib/src/main/java/com/jonanorman/android/renderclient/math/Vector2.java
apply
called by 42
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLFunction.java
getClient
called by 37
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLDispose.java
toNanos
called by 33
lib/src/main/java/com/jonanorman/android/renderclient/math/TimeStamp.java

Shape

Method 2,026
Class 137
Interface 21
Enum 10

Languages

Java100%

Modules by API surface

lib/src/main/java/com/jonanorman/android/renderclient/opengl/gl20/GL20Command.java156 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/gl20/GL20.java151 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/gl20/GL20Monitor.java150 symbols
lib/src/main/java/com/jonanorman/android/renderclient/layer/GLLayer.java96 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLRenderClient.java78 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLFrameBuffer.java75 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLTexture.java68 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/egl14/EGL14Config.java46 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLProgram.java46 symbols
lib/src/main/java/com/jonanorman/android/renderclient/util/MessageHandler.java43 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/GLRenderMessage.java41 symbols
lib/src/main/java/com/jonanorman/android/renderclient/opengl/EGLConfig.java41 symbols

For agents

$ claude mcp add GLRenderClient \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact