/// <summary> /// 頂点属性のプログラム中の位置を設定する /// </summary> /// <param name="attribution">頂点属性</param> /// <param name="location">位置</param> public void SetLocation(VertexAttribution attribution, int location) { // 描画対象を有効化 this.target.MakeCurrent(); // VAOを有効化 GL.BindVertexArray(this.vertexArray); // VBOを有効化(バインド) GL.BindBuffer(BufferTarget.ArrayBuffer, this.vertexBuffer); // 属性値を有効化 GL.EnableVertexAttribArray(location); // パラメーターの位置を設定 GL.VertexAttribPointer( location, attribution.Size, attribution.Type, attribution.Normalized, this.sizeInByte, attribution.Offset); }
/// <summary> /// バッファーにこのプログラムを割り当てる /// </summary> /// <param name="buffer">割り当てるバッファー</param> /// <param name="attribution">頂点属性の設定値</param> public void AttachBuffer(Buffer buffer, VertexAttribution[] attributions) { // バッファー群に追加 this.buffers.Add(buffer); // 自分のプログラムを使用 GL.UseProgram(this.ID); // 全頂点属性について foreach(var attribution in attributions) { // その位置を設定 buffer.SetLocation(attribution, GL.GetAttribLocation(this.ID, attribution.Name)); } }