platform/cc/DirectContext.cc (55 lines of code) (raw):

#include <iostream> #include <jni.h> #include "GrDirectContext.h" extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_DirectContext__1nMakeGL (JNIEnv* env, jclass jclass) { return reinterpret_cast<jlong>(GrDirectContext::MakeGL().release()); } #ifdef SK_METAL #include "mtl/GrMtlBackendContext.h" extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_DirectContext__1nMakeMetal (JNIEnv* env, jclass jclass, long devicePtr, long queuePtr) { GrMtlBackendContext backendContext = {}; GrMTLHandle device = reinterpret_cast<GrMTLHandle>(static_cast<uintptr_t>(devicePtr)); GrMTLHandle queue = reinterpret_cast<GrMTLHandle>(static_cast<uintptr_t>(queuePtr)); backendContext.fDevice.retain(device); backendContext.fQueue.retain(queue); sk_sp<GrDirectContext> instance = GrDirectContext::MakeMetal(backendContext); return reinterpret_cast<jlong>(instance.release()); } #endif #ifdef SK_DIRECT3D #include "d3d/GrD3DBackendContext.h" extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_DirectContext__1nMakeDirect3D (JNIEnv* env, jclass jclass, jlong adapterPtr, jlong devicePtr, jlong queuePtr) { GrD3DBackendContext backendContext = {}; IDXGIAdapter1* adapter = reinterpret_cast<IDXGIAdapter1*>(static_cast<uintptr_t>(adapterPtr)); ID3D12Device* device = reinterpret_cast<ID3D12Device*>(static_cast<uintptr_t>(devicePtr)); ID3D12CommandQueue* queue = reinterpret_cast<ID3D12CommandQueue*>(static_cast<uintptr_t>(queuePtr)); backendContext.fAdapter.retain(adapter); backendContext.fDevice.retain(device); backendContext.fQueue.retain(queue); sk_sp<GrDirectContext> instance = GrDirectContext::MakeDirect3D(backendContext); return reinterpret_cast<jlong>(instance.release()); } #endif //SK_DIRECT3D extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_DirectContext__1nFlush (JNIEnv* env, jclass jclass, jlong ptr) { GrDirectContext* context = reinterpret_cast<GrDirectContext*>(static_cast<uintptr_t>(ptr)); context->flush(GrFlushInfo()); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_DirectContext__1nSubmit (JNIEnv* env, jclass jclass, jlong ptr, jboolean syncCpu) { GrDirectContext* context = reinterpret_cast<GrDirectContext*>(static_cast<uintptr_t>(ptr)); context->submit(syncCpu); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_DirectContext__1nReset (JNIEnv* env, jclass jclass, jlong ptr, jint flags) { GrDirectContext* context = reinterpret_cast<GrDirectContext*>(static_cast<uintptr_t>(ptr)); context->resetContext((uint32_t) flags); } extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skija_DirectContext__1nAbandon (JNIEnv* env, jclass jclass, jlong ptr, jint flags) { GrDirectContext* context = reinterpret_cast<GrDirectContext*>(static_cast<uintptr_t>(ptr)); context->abandonContext(); }