web
Emscripten Embind(C++ 함수를 JavaScript에 바인딩) React에 적용하기
nowoodeel
2024. 11. 20. 00:23
728x90
React 앱에 Emscripten Embind lerp 예제 적용
lerp.js, lerp.wasm 만들기
https://nowoodeel.tistory.com/51
Emscripten Embind(C++ 함수를 JavaScript에 바인딩) 사용해 보기
Embind는 C++ 함수와 클래스를 JavaScript에 바인딩해서 사용할 수 있다.자세한 예제https://github.com/emscripten-core/emscripten/tree/main/test/embind emscripten/test/embind at main · emscripten-core/emscriptenEmscripten: An LLVM-to-
nowoodeel.tistory.com
PowerShell을 실행하고 lerp-example react 프로젝트를 만든다.
npx create-react-app lerp-example
cd lerp-example
public 폴더에 미리 생성한 lerp.js, lerp.wasm 파일을 복사한다.
cp lerp.js lerp-example/public/
cp lerp.wasm lerp-example/public/
lerp-example/
├── public/
│ └── lerp.js, lerp.wasm // Emscripten으로 컴파일된 JS 파일
├── src/
│ └── App.js // React 컴포넌트 코드
└── package.json
lerp-example/src/App.js를 Emscripten으로 컴파일된 JavaScript를 로드하게 한다.
import React, { useEffect, useState } from 'react';
import './App.css';
function App() {
const [lerpResult, setLerpResult] = useState(null);
useEffect(() => {
// Emscripten 코드가 로드된 후 onRuntimeInitialized 함수가 호출됩니다.
const loadModule = () => {
if (!window.Module) {
window.Module = {
onRuntimeInitialized: () => {
const result = window.Module.lerp(1, 2, 0.5); // 1과 2 사이에서 0.5 위치에 해당하는 값을 계산
console.log('lerp result:', result);
setLerpResult(result); // 결과를 상태에 저장
},
};
// Emscripten으로 컴파일된 JavaScript 파일 로드
const script = document.createElement('script');
script.src = '/lerp.js';
script.async = true;
script.onload = () => {
console.log('Emscripten module loaded');
};
script.onerror = (error) => {
console.error('Error loading the Emscripten module', error);
};
document.body.appendChild(script);
}
};
loadModule();
}, []); // 빈 배열을 전달하여 컴포넌트가 처음 마운트될 때만 실행
return (
<div className="App">
<header className="App-header">
<h1>Lerp Example</h1>
{lerpResult !== null ? (
<p>Lerp result: {lerpResult}</p>
) : (
<p>Loading...</p>
)}
</header>
</div>
);
}
export default App;
실행
npm start

반응형