import { hilog } from '@kit.PerformanceAnalysisKit'; import Native3D from 'libn3d.so'; const DOMAIN = 0x0000; class MyXComponentController extends XComponentController{ onSurfaceCreated(surfaceId: string): void { console.info(`onSurfaceCreated surfaceId: ${surfaceId}`); Native3D.SetSurfaceId(BigInt(surfaceId)); } onSurfaceChanged(surfaceId: string, rect: SurfaceRect): void { console.info(`onSurfaceChanged surfaceId: ${surfaceId}, rect: ${JSON.stringify(rect)}}`); // 在onSurfaceChanged中调用ChangeSurface绘制内容 Native3D.ChangeSurface(BigInt(surfaceId), rect.surfaceWidth, rect.surfaceHeight); } onSurfaceDestroyed(surfaceId: string): void { console.info(`onSurfaceDestroyed surfaceId: ${surfaceId}`); Native3D.DestroySurface(BigInt(surfaceId)); } } @Entry @Component struct Index { @State objStatus: string = "当前状态:"; @State currentStatus: string = "Null"; @State msgHead: string = 'Native3D Demo'; @State btnRun:string ='绘制图形'; @State btnChn:string ='改变颜色'; ComCtrl: XComponentController = new MyXComponentController(); build() { Column() { Row() { Text(this.msgHead) .fontSize(18) .fontWeight(FontWeight.Bold) }.height('10%') Column({ space: 10 }){ XComponent({ type: XComponentType.SURFACE, controller: this.ComCtrl }).height('80%') Row(){ Text(this.objStatus) .fontSize('24fp') .fontWeight(500) .height('20%') Text(this.currentStatus) .fontSize('24fp') .fontWeight(500) .height('20%') }.height('20%') }.height('80%') Column() { Row(){ Text('渲染后端:') Checkbox() Text('OpenGL ES') Checkbox() Text('Vulkan') } Row() { Button(this.btnRun) .fontSize(22) .fontWeight(FontWeight.Bold) .onClick(() => { let surfaceId = this.ComCtrl.getXComponentSurfaceId(); Native3D.DrawPattern(BigInt(surfaceId)); let hasDraw: boolean = false; if (Native3D.GetXComponentStatus(BigInt(surfaceId))) { hasDraw = Native3D.GetXComponentStatus(BigInt(surfaceId)).hasDraw; } if (hasDraw) { this.currentStatus = "绘制图形"; } }) Button(this.btnChn) .fontSize(22) .fontWeight(FontWeight.Bold) .onClick(() => { let surfaceId = this.ComCtrl.getXComponentSurfaceId(); Native3D.ChangeColor(BigInt(surfaceId)); let hasChangeColor: boolean = false; if (Native3D.GetXComponentStatus(BigInt(surfaceId))) { hasChangeColor = Native3D.GetXComponentStatus(BigInt(surfaceId)).hasChangeColor; } if (hasChangeColor) { this.currentStatus = "改变颜色"; } }) } }.height('10%') } } }