Skip to content

Commit

Permalink
generate binding from yaml specification and add JVM/Android support (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
ygdrasil-io authored Jan 5, 2025
1 parent 7a6f812 commit ceaef87
Show file tree
Hide file tree
Showing 146 changed files with 42,632 additions and 602 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
java-version: 22
cache: 'gradle'

# Initializes the CodeQL tools for scanning.
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
java-version: 22
cache: 'gradle'
- name: Build and publish with Gradle
run: |
gradle wrapper
./gradlew fetch-native-dependencies
./gradlew assemble
./gradlew build
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
java-version: 22
- name: Build and publish with Gradle
# Each step must be separate, so native libraries are taken into account.
run: |
gradle wrapper
./gradlew fetch-native-dependencies
./gradlew assemble
./gradlew build
Expand Down
11 changes: 7 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,24 @@ jobs:
os: [ macos-14, ubuntu-latest, windows-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: install dependencies
if: matrix.os == 'ubuntu-latest'
run: sudo apt install -y libglfw3-dev
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
java-version: 22
cache: 'gradle'
- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }}
restore-keys: ${{ runner.os }}-gradle
- name: Fetch native dependencies
- name: Build
run: |
./gradlew fetch-native-dependencies
- name: package
run: ./gradlew assemble --stacktrace
./gradlew assemble
./gradlew build
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ allprojects {
}

group = "io.ygdrasil"
version = System.getenv("VERSION")?.takeIf { it.isNotBlank() } ?: "0.0.0-SNAPSHOT"
version = System.getenv("VERSION")?.takeIf { it.isNotBlank() } ?: "v22.0.0-SNAPSHOT"
}


1 change: 1 addition & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ dependencies {
implementation(libs.zip4j)
implementation(libs.okhttp)
implementation(libs.commons.io)

}
70 changes: 70 additions & 0 deletions demo/android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id(libs.plugins.kotlin.multiplatform.get().pluginId)
id(libs.plugins.android.application.get().pluginId)
}

kotlin {
androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget = JvmTarget.JVM_22
}
}

sourceSets {
androidMain.dependencies {
implementation(libs.android.native.helper)
implementation(projects.demo.common)
implementation(libs.activity.compose)
}
}
}

android {
compileSdk = 35

defaultConfig {
applicationId = "io.ygdrasil.wgpu"

minSdk = 28
targetSdk = 35
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}

buildTypes {
getByName("release") {
isMinifyEnabled = false
isDebuggable = true
}
getByName("debug") {
applicationIdSuffix = ".debug"
isDebuggable = true
isMinifyEnabled = false
}
}

packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
excludes += "META-INF/INDEX.LIST"
excludes += "**/**.sha1"
}

}
namespace = "io.ygdrasil.wgpu"
}

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(22))
}
}
21 changes: 21 additions & 0 deletions demo/android/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
25 changes: 25 additions & 0 deletions demo/android/src/androidMain/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
tools:replace="android:extractNativeLibs"
android:extractNativeLibs="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="wgpu on Android"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:largeHeap="true"
android:theme="@style/Theme.Wgpu">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>


</manifest>
26 changes: 26 additions & 0 deletions demo/android/src/androidMain/kotlin/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.ygdrasil.wgpu

import android.os.Bundle
import android.view.ViewGroup
import androidx.activity.ComponentActivity
import ffi.memoryScope
import io.ygdrasil.wgpu.WGPUAdapterInfo


class MainActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val layoutParams = ViewGroup
.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)

val surfaceView = WGPUSurfaceView(context = this)
surfaceView.layoutParams = layoutParams
addContentView(surfaceView, surfaceView.layoutParams)

}
}
67 changes: 67 additions & 0 deletions demo/android/src/androidMain/kotlin/WGPUSurfaceView.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package io.ygdrasil.wgpu

import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import android.view.SurfaceHolder
import android.view.SurfaceView
import com.sun.jna.Pointer
import ffi.memoryScope


class WGPUSurfaceView : SurfaceView, SurfaceHolder.Callback2 {

var scene: HelloTriangleScene? = null

constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)

init {
holder.addCallback(this)
configureLogs()
}

override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {}

override fun surfaceCreated(surfaceHolder: SurfaceHolder): Unit = memoryScope { scope ->
val instance = wgpuCreateInstance(null) ?: error("fail to create instance")
val surface = getSurface(instance, holder)
val adapter = getAdapter(surface, instance, WGPUBackendType_Vulkan)
val device = getDevice(adapter)
val surfaceCapabilities = surfaceCapabilities(surface, adapter)
configureSurface(device, width, height, surface, surfaceCapabilities.formats.first(), surfaceCapabilities.alphaModes.first(), listOf(surfaceCapabilities.formats.first()))
scene = HelloTriangleScene(device, surfaceCapabilities.formats.first(), surface).apply {
initialize()
}

setWillNotDraw(false)
}

override fun surfaceDestroyed(holder: SurfaceHolder) {}

override fun draw(canvas: Canvas) {
super.draw(canvas)
scene?.render()
invalidate()
}

override fun surfaceRedrawNeeded(holder: SurfaceHolder) {}

}

fun getSurface(
instance: WGPUInstance,
surfaceHolder: SurfaceHolder
): WGPUSurface = memoryScope { scope ->
val nativeWindow = io.ygdrasil.nativeHelper.Helper.nativeWindowFromSurface(surfaceHolder.surface)

val surfaceDescriptor = WGPUSurfaceDescriptor.allocate(scope).apply {
nextInChain = WGPUSurfaceDescriptorFromAndroidNativeWindow.allocate(scope).apply {
chain.sType = WGPUSType_SurfaceDescriptorFromAndroidNativeWindow
window = Pointer(nativeWindow)
}.handler
}

wgpuInstanceCreateSurface(instance, surfaceDescriptor) ?: error("fail to create surface")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
Loading

0 comments on commit ceaef87

Please sign in to comment.