---
title: WebGLRenderingContext.bufferData()
slug: Web/API/WebGLRenderingContext/bufferData
translation_of: Web/API/WebGLRenderingContext/bufferData
---
<div>{{APIRef("WebGL")}}</div>

<p><a href="/ja/docs/Web/API/WebGL_API">WebGL API</a> <strong><code>WebGLRenderingContext.bufferData()</code></strong> メソッドは、バッファーオブジェクトのデータストアを初期化、作成します。</p>

<h2 id="構文">構文</h2>

<pre class="syntaxbox">// WebGL1:
void gl.bufferData(target, size, usage);
void gl.bufferData(target, ArrayBuffer? srcData, usage);
void gl.bufferData(target, ArrayBufferView srcData, usage);

// WebGL2:
void gl.bufferData(target, ArrayBufferView srcData, usage, srcOffset, length);
</pre>

<h3 id="引数">引数</h3>

<dl>
 <dt>target</dt>
 <dd>結合する場所 (ターゲット) を指定する {{domxref("GLenum")}}。以下の値を取ることができます。
 <ul>
  <li><code>gl.ARRAY_BUFFER</code>: 頂点の属性を含むバッファーで、頂点座標、テクスチャ座標データや、頂点色データのようなものです。</li>
  <li><code>gl.ELEMENT_ARRAY_BUFFER</code>: 要素の位置指定に使用されるバッファーです。</li>
  <li>{{domxref("WebGL2RenderingContext", "WebGL 2 context", "", 1)}} を使用している場合は、更にに以下の値を利用できます。
   <ul>
    <li><code>gl.COPY_READ_BUFFER</code>: バッファーオブジェクトを他へコピーするためのバッファーです。</li>
    <li><code>gl.COPY_WRITE_BUFFER</code>: バッファーオブジェクトを他へコピーするためのバッファーです。</li>
    <li><code>gl.TRANSFORM_FEEDBACK_BUFFER</code>: 書き戻し操作を変換するバッファーです。</li>
    <li><code>gl.UNIFORM_BUFFER</code>: ユニフォームブロックの格納に使われるバッファーです。</li>
    <li><code>gl.PIXEL_PACK_BUFFER</code>: ピクセル移動操作に使われるバッファーです。</li>
    <li><code>gl.PIXEL_UNPACK_BUFFER</code>: ピクセル移動操作に使われるバッファーです。</li>
   </ul>
  </li>
 </ul>
 </dd>
 <dt>size</dt>
 <dd>{{domxref("GLsizeiptr")}} のバッファーオブジェクトのデータストアのサイズ。</dd>
 <dt>srcData {{optional_inline}}</dt>
 <dd>{{jsxref("ArrayBuffer")}}, {{jsxref("SharedArrayBuffer")}} か {{domxref("ArrayBufferView")}} の型付き配列型の一つで、データストアへ格納されます。<code>null</code> の場合、データストアは作成されますが、内容は初期化されず未定義です。</dd>
 <dt>usage</dt>
 <dd>データストアの用途を指定する {{domxref("GLenum")}}。以下の値を取ることができます。
 <ul>
  <li><code>gl.STATIC_DRAW</code>: バッファーの内容は、何度か使用されてあまり変更されません。バッファーへ書き込まれますが、読み出せません。</li>
  <li><code>gl.DYNAMIC_DRAW</code>: バッファーの内容は、よく使用されて何度か変更されます。バッファーへ書き込まれますが、読み出せません。</li>
  <li><code>gl.STREAM_DRAW</code>: バッファーの内容は、よく使用され変更されます。バッファーへ書き込まれますが、読み出せません。</li>
  <li>{{domxref("WebGL2RenderingContext", "WebGL 2 context", "", 1)}} を使用している場合、さらに以下の値を取ることができます。
   <ul>
    <li><code>gl.STATIC_READ</code>: バッファーの内容は、何度か使用されてあまり変更されません。バッファーから読み出されますが、書き込めません。</li>
    <li><code>gl.DYNAMIC_READ</code>: バッファーの内容は、よく使用されて何度か変更されます。バッファーから読み出されますが、書き込めません。</li>
    <li><code>gl.STREAM_READ</code>: バッファーの内容は、よく使用され変更されます。バッファーから読み出されますが、書き込めません。</li>
    <li><code>gl.STATIC_COPY</code>: バッファーの内容は、何度か使用されてあまり変更されません。ユーザーによる書き込みや読み出しはできません。</li>
    <li><code>gl.DYNAMIC_COPY</code>: バッファーの内容は、よく使用されて何度か変更されます。ユーザーによる書き込みや読み出しはできません。</li>
    <li><code>gl.STREAM_COPY</code>: バッファーの内容は、よく使用され変更されます。ユーザーによる書き込みや読み出しはできません。</li>
   </ul>
  </li>
 </ul>
 </dd>
 <dt>srcOffset</dt>
 <dd>バッファー読み出しを開始する要素の位置のオフセットを指定する {{domxref("GLuint")}}。</dd>
 <dt><code>length</code> {{optional_inline}}</dt>
 <dd>{{domxref("GLuint")}}。既定値は 0 です。</dd>
</dl>

<h3 id="返り値">返り値</h3>

<p>ありません。</p>

<h3 id="例外">例外</h3>

<ul>
 <li>与えられた <code>size</code> でデータストアを作成できない場合、<code>gl.OUT_OF_MEMORY</code> エラーをスローします。</li>
 <li><code>size</code> が負数の場合、<code>gl.INVALID_VALUE</code> エラーをスローします。</li>
 <li><code>target</code> や <code>usage</code> が許可された列挙のものでない場合、<code>gl.INVALID_ENUM</code> エラーをスローします。</li>
</ul>

<h2 id="例">例</h2>

<h3 id="bufferData_の使用"><code>bufferData</code> の使用</h3>

<pre class="brush: js">var canvas = document.getElementById('canvas');
var gl = canvas.getContext('webgl');
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, 1024, gl.STATIC_DRAW);
</pre>

<h3 id="バッファー情報の取得">バッファー情報の取得</h3>

<p>現在のバッファーの用途やサイズを確認するには、{{domxref("WebGLRenderingContext.getBufferParameter()")}} メソッドを使用します。</p>

<pre class="brush: js">gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE);
gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_USAGE);
</pre>

<h2 id="仕様策定状況">仕様策定状況</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">仕様</th>
   <th scope="col">策定状況</th>
   <th scope="col">コメント</th>
  </tr>
  <tr>
   <td>{{SpecName('WebGL', "#5.14.5", "bufferData")}}</td>
   <td>{{Spec2('WebGL')}}</td>
   <td>初回定義。</td>
  </tr>
  <tr>
   <td>{{SpecName('OpenGL ES 2.0', "glBufferData.xml", "glBufferData")}}</td>
   <td>{{Spec2('OpenGL ES 2.0')}}</td>
   <td>OpenGL API のマニュアルページ。</td>
  </tr>
  <tr>
   <td>{{SpecName('OpenGL ES 3.0', "glBufferData.xhtml", "glBufferData")}}</td>
   <td>{{Spec2('OpenGL ES 3.0')}}</td>
   <td>OpenGL ES 3 API (と同様の) マニュアルページ。<br>
    <br>
    以下の新しい <code>target</code> バッファーを追加。<br>
    <code>gl.COPY_READ_BUFFER</code>,<br>
    <code>gl.COPY_WRITE_BUFFER</code>,<br>
    <code>gl.TRANSFORM_FEEDBACK_BUFFER</code>,<br>
    <code>gl.UNIFORM_BUFFER</code>,<br>
    <code>gl.PIXEL_PACK_BUFFER</code>,<br>
    <code>gl.PIXEL_UNPACK_BUFFER</code><br>
    <br>
    以下の新しい <code>usage</code> ヒントを追加。<br>
    <code>gl.STATIC_READ</code>,<br>
    <code>gl.DYNAMIC_READ</code>,<br>
    <code>gl.STREAM_READ</code>,<br>
    <code>gl.STATIC_COPY</code>,<br>
    <code>gl.DYNAMIC_COPY</code>,<br>
    <code>gl.STREAM_COPY</code>.</td>
  </tr>
 </tbody>
</table>

<h2 id="ブラウザーの対応">ブラウザーの対応</h2>

<p>{{Compat("api.WebGLRenderingContext.bufferData")}}</p>

<h2 id="関連項目">関連項目</h2>

<ul>
 <li>{{domxref("WebGLRenderingContext.createBuffer()")}}</li>
 <li>{{domxref("WebGLRenderingContext.bufferSubData()")}}</li>
 <li>他のバッファー : {{domxref("WebGLFramebuffer")}}, {{domxref("WebGLRenderbuffer")}}</li>
</ul>