Skip to content

Commit

Permalink
[ko] OffscreenCanvas 문서 업데이트 (#23044)
Browse files Browse the repository at this point in the history
* [ko] OffscreenCanvas 문서 업데이트

* Update files/ko/web/api/offscreencanvas/index.md
  • Loading branch information
jinbekim authored Oct 10, 2024
1 parent ea21c7b commit 97d0269
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 57 deletions.
15 changes: 6 additions & 9 deletions files/ko/web/api/offscreencanvas/height/index.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
---
title: OffscreenCanvas.height
slug: Web/API/OffscreenCanvas/height
l10n:
sourceCommit: f6ff6e14c5af7cb9ed701d7f4506f770014c704f
---

{{APIRef("Canvas API")}} {{SeeCompatTable}}
{{APIRef("Canvas API")}}{{AvailableInWorkers}}

**`height`** 프로퍼티는 {{domxref("OffscreenCanvas")}} 객체에 할당된 높이를 반환합니다.
**`height`** 속성은 {{domxref("OffscreenCanvas")}} 객체에 할당된 높이를 반환합니다.

## 구문

```js
var pxl = offscreen.height;
offscreen.height = pxl;
```

## 예시
## 예제

새로운 offscreen 캔버스를 생성하고 높이를 설정하거나 반환합니다.

```js
var offscreen = new OffscreenCanvas(256, 256);
const offscreen = new OffscreenCanvas(256, 256);
offscreen.height; // 256
offscreen.height = 512;
```
Expand Down
86 changes: 54 additions & 32 deletions files/ko/web/api/offscreencanvas/index.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
---
title: OffscreenCanvas
slug: Web/API/OffscreenCanvas
l10n:
sourceCommit: f6ff6e14c5af7cb9ed701d7f4506f770014c704f
---

{{APIRef("Canvas API")}} {{SeeCompatTable}}
{{APIRef("Canvas API")}}{{AvailableInWorkers}}

**`OffscreenCanvas`** 는 화면 밖에서 렌더링되는 캔버스 인터페이스입니다. window 객체와 [worker](/ko/docs/Web/API/Web_Workers_API) 객체 모두 지원합니다.
{{HtmlElement("canvas")}} 요소나 [Canvas API](/ko/docs/Web/API/Canvas_API)를 사용할 때, 렌더링, 애니메이션, 사용자 상호작용은 일반적으로 웹 애플리케이션의 주 실행 스레드에서 발생합니다.
캔버스 애니메이션과 렌더링과 관련된 계산은 애플리케이션 성능에 상당한 영향을 미칠 수 있습니다.

**`OffscreenCanvas`** 인터페이스는 화면 밖에서 렌더링할 수 있는 캔버스를 제공하고 DOM과 Canvas API를 분리하여 {{HtmlElement("canvas")}} 요소가 DOM에 완전히 의존하지 않도록 합니다. 렌더링 작업은 [worker](/ko/docs/Web/API/Web_Workers_API) 맥락 내에서 실행할 수도 있어서 별도의 스레드에서 일부 작업을 실행하고 메인 스레드에서 무거운 작업을 피할 수 있습니다.

`OffscreenCanvas`[transferable object](/ko/docs/Web/API/Web_Workers_API/Transferable_objects)입니다.

{{InheritanceDiagram}}

## 생성자

- {{domxref("OffscreenCanvas.OffscreenCanvas", "OffscreenCanvas()")}}
- : `OffscreenCanvas` 생성자. 새 `OffscreenCanvas` 객체를 생성합니다.

## 프로퍼티
## 속성

- {{domxref("OffscreenCanvas.height")}}
- : 캔버스의 높이
Expand All @@ -23,22 +32,33 @@ slug: Web/API/OffscreenCanvas

- {{domxref("OffscreenCanvas.getContext()")}}

- : 렌더링된 캔버스 컨텍스트 객체를 반환합니다.
- : 렌더링된 캔버스 맥락 객체를 반환합니다.

- {{domxref("OffscreenCanvas.convertToBlob()")}}

- : 캔버스에 들어있는 이미지에 대한 {{domxref("Blob")}} 객체를 생성합니다.

- {{domxref("OffscreenCanvas.transferToImageBitmap()")}}
- : `OffscreenCanvas`에 렌더링된 이미지중에서 가장 최근에 렌더링된 이미지를 {{domxref("ImageBitmap")}} 객체로 생성합니다.
- : `OffscreenCanvas`에 렌더링된 이미지중에서 가장 최근에 렌더링된 이미지를 {{domxref("ImageBitmap")}} 객체로 생성합니다. {{domxref("ImageBitmap")}}을 관리하는데 중요한 참고사항을 확인하세요.

## 이벤트

부모인 {{domxref("EventTarget")}}으로부터 이벤트를 상속받습니다.

{{DOMxRef("EventTarget.addEventListener", "addEventListener()")}} 또는 `oneventname` 속성에 이벤트 리스너를 할당하여 이벤트를 수신하세요.

## 예시
- [`contextlost`](/ko/docs/Web/API/OffscreenCanvas/contextlost_event)
- : [`OffscreenCanvasRenderingContext2D`](/ko/docs/Web/API/OffscreenCanvasRenderingContext2D) 맥락 손실을 감지하면 발생합니다.
- [`contextrestored`](/ko/docs/Web/API/OffscreenCanvas/contextrestored_event)
- : [`OffscreenCanvasRenderingContext2D`](/ko/docs/Web/API/OffscreenCanvasRenderingContext2D) 맥락을 복원하면 발생합니다.

## 예제

### `OffscreenCanvas` 에서 만들어진 프레임을 동기적으로 화면에 보여주는 방법

`OffscreenCanvas` API를 사용하는 방법은 `OffscreenCanvas`에 속한 {{domxref("RenderingContext")}}를 이용해 새로운 프레임 객체를 생성하는 것입니다. 새 프레임이 컨텍스트에 렌더링이 되고나면, 가장 최근에 렌더링 된 이미지를 저장하는 {{domxref("OffscreenCanvas.transferToImageBitmap", "transferToImageBitmap()")}} 메소드를 호출할 수 있습니다. 이 메소드는 다른 수 많은 Web API에서 사용되고 있는 {{domxref("ImageBitmap")}} 객체를 리턴합니다.
`OffscreenCanvas` API를 사용하는 한 가지 방법은 `OffscreenCanvas`에 속한 `RenderingContext`를 이용해 새로운 프레임 객체를 생성하는 것입니다. 새 프레임이 맥락에 렌더링 되고나면, {{domxref("OffscreenCanvas.transferToImageBitmap", "transferToImageBitmap()")}} 메소드를 호출하여 가장 최근에 렌더링 된 이미지를 저장 할 수 있습니다. 이 메소드는 전송 사본을 생성하지 않고도, 다른 수 많은 Web API와 두번째 캔버스에서 사용될 수 있는 {{domxref("ImageBitmap")}} 객체를 리턴합니다.

`ImageBitmap`을 화면에 표시하려면, 현재 (화면에 보여지고 있는) 캔버스 요소의 `canvas.getContext("bitmaprenderer")` 메소드를 호출했을 때 생성되는 {{domxref("ImageBitmapRenderingContext")}} 객체를 사용하면 됩니다. 이 컨텍스트는 캔버스의 내용을 주어진 `ImageBitmap`으로 전환하는 기능을 제공합니다. `OffscreenCanvas`에서 이전에 렌더링이 되어서 등록된 `ImageBitmap`이용한 {{domxref("ImageBitmapRenderingContext.transferFromImageBitmap()")}}을 호출하면 `ImageBitmap`이 캔버스에 표시되고 소유권 역시 캔버스로 넘어갑니다. 단일 `OffscreenCanvas`는 프레임들을 임의의 다른 `ImageBitmapRenderingContext` 객체로 전달합니다.
`ImageBitmap`을 화면에 표시하려면, 현재 (화면에 보여지고 있는) 캔버스 요소의 `canvas.getContext("bitmaprenderer")` 메소드를 호출했을 때 생성되는 {{domxref("ImageBitmapRenderingContext")}} 맥락을 사용하면 됩니다. 이 맥락는 캔버스의 내용을 지정된 `ImageBitmap`으로 전환하는 기능만 제공합니다. `OffscreenCanvas`에서 이전에 렌더링이 되고 저장된 `ImageBitmap`사용하여 {{domxref("ImageBitmapRenderingContext.transferFromImageBitmap()")}}을 호출하면 `ImageBitmap`이 캔버스에 표시되고 소유권이 캔버스로 넘어갑니다. 단일 `OffscreenCanvas`는 프레임들을 임의의 다른 `ImageBitmapRenderingContext` 객체들로 전달할 수 있습니다.

아래에 두 개의 {{HTMLElement("canvas")}} 요소가 있습니다.

Expand All @@ -49,65 +69,66 @@ slug: Web/API/OffscreenCanvas
다음의 코드는 위에서 설명한 것처럼 `OffscreenCanvas`를 이용해 렌더링합니다.

```js
var one = document.getElementById("one").getContext("bitmaprenderer");
var two = document.getElementById("two").getContext("bitmaprenderer");
const one = document.getElementById("one").getContext("bitmaprenderer");
const two = document.getElementById("two").getContext("bitmaprenderer");

var offscreen = new OffscreenCanvas(256, 256);
var gl = offscreen.getContext("webgl");
const offscreen = new OffscreenCanvas(256, 256);
const gl = offscreen.getContext("webgl");

// ... gl 컨텍스트를 이용해 첫 번째 캔버스에 무언가를 그립니다 ...
// ... gl 맥락을 이용해 첫 번째 캔버스에 무언가를 그립니다 ...

// 첫 번째 캔버스에 렌더링을 수행합니다.
var bitmapOne = offscreen.transferToImageBitmap();
const bitmapOne = offscreen.transferToImageBitmap();
one.transferFromImageBitmap(bitmapOne);

// ... gl 컨텍스트를 이용해 두 번째 캔버스에 무언가를 그립니다 ...
// ... gl 맥락을 이용해 두 번째 캔버스에 무언가를 그립니다 ...

// 두 번째 캔버스에 렌더링을 수행합니다.
var bitmapTwo = offscreen.transferToImageBitmap();
const bitmapTwo = offscreen.transferToImageBitmap();
two.transferFromImageBitmap(bitmapTwo);
```

### `OffscreenCanvas` 에서 만들어진 프레임을 비동기적으로 화면에 보여주는 방법

`OffscreenCanvas` API를 이용하는 또 다른 방법은 [worker](/ko/docs/Web/API/Web_Workers_API) 또는 메인 스레드위에서 {{HTMLElement("canvas")}} 요소의 {{domxref("HTMLCanvasElement.transferControlToOffscreen", "transferControlToOffscreen()")}}를 호출하는 것입니다. 여기서 메인 스레드는 `OffscreenCanvas` 객체를 반환하는 {{domxref("HTMLCanvasElement")}} 객체를 가지고 있습니다. {{domxref("OffscreenCanvas.getContext", "getContext()")}}를 호출하면 `OffscreenCanvas`에서 `RenderingContext`를 얻을 수 있습니다.
`OffscreenCanvas` API를 이용하는 또 다른 방법은 {{HTMLElement("canvas")}}{{domxref("HTMLCanvasElement.transferControlToOffscreen", "transferControlToOffscreen()")}}를 호출하는 것 입니다. [worker](/ko/docs/Web/API/Web_Workers_API) 또는 메인 스레드에서 여부와 관계없이, 메인 스레드의 {{domxref("HTMLCanvasElement")}}객체의 `OffscreenCanvas` 객체를 반환합니다. {{domxref("OffscreenCanvas.getContext", "getContext()")}}를 호출하면 해당 `OffscreenCanvas` `RenderingContext`를 얻을 수 있습니다.

main.js (메인 스레드 코드):
main.js (메인 스레드 코드)는 다음과 같을 수 있습니다.

```js
var htmlCanvas = document.getElementById("canvas");
var offscreen = htmlCanvas.transferControlToOffscreen();
const htmlCanvas = document.getElementById("canvas");
const offscreen = htmlCanvas.transferControlToOffscreen();

var worker = new Worker("offscreencanvas.js");
const worker = new Worker("offscreencanvas.js");
worker.postMessage({ canvas: offscreen }, [offscreen]);
```

offscreencanvas.js (worker 코드):
반면에 `offscreencanvas.js` 스크립트 (worker 스레드)는 다음과 같을 수 있습니다.

```js
onmessage = function (evt) {
var canvas = evt.data.canvas;
var gl = canvas.getContext("webgl");

// ... gl 컨텍스트를 이용해 무언가를 그립니다 ...
onmessage = (evt) => {
const canvas = evt.data.canvas;
const gl = canvas.getContext("webgl");
// ... gl 맥락을 이용해 무언가를 그립니다 ...
};
```

worker 내에서 requestAnimationFrame 또한 사용할 수 있습니다.
또한 worker 내에서 {{domxref("Window.requestAnimationFrame", "requestAnimationFrame()")}}를 사용할 수 있습니다.

```js
onmessage = function (evt) {
onmessage = (evt) => {
const canvas = evt.data.canvas;
const gl = canvas.getContext("webgl");

function render(time) {
// ... gl 컨텍스트를 이용해 무언가를 그립니다 ...
// ... gl 맥락을 이용해 무언가를 그립니다 ...
requestAnimationFrame(render);
}
requestAnimationFrame(render);
};
```

전체 예제는 GitHub의 [OffscreenCanvas 예제 소스](https://github.com/mdn/dom-examples/tree/main/web-workers/offscreen-canvas-worker)를 참조하거나 [OffscreenCanvas 예제 라이브](https://mdn.github.io/dom-examples/web-workers/offscreen-canvas-worker/)를 실행하세요.

## 상세

{{Specifications}}
Expand All @@ -118,9 +139,10 @@ onmessage = function (evt) {

## 더 보기

- [WebGL Off the Main Thread – Mozilla Hacks](https://hacks.mozilla.org/2016/01/webgl-off-the-main-thread/)
- {{domxref("CanvasRenderingContext2D")}}
- {{domxref("OffscreenCanvasRenderingContext2D")}}
- {{domxref("ImageBitmap")}}
- {{domxref("ImageBitmapRenderingContext")}}
- {{domxref("HTMLCanvasElement.transferControlToOffscreen()")}}
- {{domxref("WebGLRenderingContext.commit()")}}
- {{domxref("Window.requestAnimationFrame()", "requestAnimationFrame()")}}
- [WebGL Off the Main Thread – Mozilla Hacks](https://hacks.mozilla.org/2016/01/webgl-off-the-main-thread/) (2016)
18 changes: 12 additions & 6 deletions files/ko/web/api/offscreencanvas/offscreencanvas/index.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
---
title: OffscreenCanvas()
slug: Web/API/OffscreenCanvas/OffscreenCanvas
l10n:
sourceCommit: f6ff6e14c5af7cb9ed701d7f4506f770014c704f
---

{{APIRef("Canvas API")}} {{SeeCompatTable}}
{{APIRef("Canvas API")}}{{AvailableInWorkers}}

**`OffscreenCanvas()`** 생성자는 새롭게 초기화된 {{domxref("OffscreenCanvas")}} 객체를 반환합니다.

## 구문

```js
```js-nolint
new OffscreenCanvas(width, height);
```

Expand All @@ -20,13 +22,17 @@ new OffscreenCanvas(width, height);
- `height`
- : offscreen 캔버스의 높이

## 예시
{{APIRef("Canvas API")}}{{AvailableInWorkers}}

The **`OffscreenCanvas()`** constructor returns a newly instantiated {{domxref("OffscreenCanvas")}} object.

## 예제

예시는 `OffscreenCanvas()` 생성자를 이용해 새로운 offscreen 캔버스를 생성하고, [WebGL](/ko/docs/Web/API/WebGL_API) 컨텍스트의 {{domxref("OffscreenCanvas.getContext()", "getContext()")}} 메소드를 사용해 초기화합니다.
예제는 `OffscreenCanvas()` 생성자를 이용해 새로운 offscreen 캔버스를 생성하고, [WebGL](/ko/docs/Web/API/WebGL_API) 맥락의 {{domxref("OffscreenCanvas.getContext()", "getContext()")}} 메서드를 사용해 초기화합니다.

```js
let offscreen = new OffscreenCanvas(256, 256);
let gl = offscreen.getContext("webgl");
const offscreen = new OffscreenCanvas(256, 256);
const gl = offscreen.getContext("webgl");
```

## 명세서
Expand Down
17 changes: 7 additions & 10 deletions files/ko/web/api/offscreencanvas/width/index.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
---
title: OffscreenCanvas.width
slug: Web/API/OffscreenCanvas/width
l10n:
sourceCommit: f6ff6e14c5af7cb9ed701d7f4506f770014c704f
---

{{APIRef("Canvas API")}} {{SeeCompatTable}}
{{APIRef("Canvas API")}}{{AvailableInWorkers}}

**`width`** 프로퍼티는 {{domxref("OffscreenCanvas")}} 객체에 할당된 너비를 반환합니다.
**`width`** 속성은 {{domxref("OffscreenCanvas")}} 객체에 할당된 너비를 반환합니다.

## 구문
##

```js
var pxl = offscreen.width;
offscreen.width = pxl;
```

## 예시
## 예제

새로운 offscreen 캔버스를 생성하고 높이를 설정하거나 반환합니다.

```js
var offscreen = new OffscreenCanvas(256, 256);
const offscreen = new OffscreenCanvas(256, 256);
offscreen.width; // 256
offscreen.width = 512;
```
Expand Down

0 comments on commit 97d0269

Please sign in to comment.