質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1244閲覧

structがメモリを占領してしまいます。

seri

総合スコア422

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/09/08 09:56

編集2016/09/08 12:48

順を追って説明します

まず、ヘッダファイルに以下を記述して

vector<CUSTOM_VERTEX> verts; struct CUSTOM_VERTEX { GLfloat tx, ty; GLfloat r, g, b, a; GLfloat nx, ny, nz; GLfloat x, y, z; };

cppファイルには

c++

1 CUSTOM_VERTEX cv = { 2 texs[i].x,texs[i].y, 3 colors[i].r, colors[i].g, colors[i].b, colors[i].a, 4 norms[i].x, norms[i].y, norms[i].z, 5 verts[i].x, verts[i].y, verts[i].z 6 }; 7 verts.push_back(cv); 8 }

といったように cvとゆう名前でstruct CUSTOM_VERTEXに値を入れ、vertsとゆうCUSTOM_VERTEX型の配列に挿入しています

このvertsの使い道は、以下のようになります

C++

1glBindBuffer(GL_ARRAY_BUFFER, buffers[0]); 2glBufferData(GL_ARRAY_BUFFER, verts.size() * sizeof(CUSTOM_VERTEX), &verts[0], GL_DYNAMIC_DRAW);

さて、、ここで使用し終わったバッファを消したのですが(以下コード)

C++

1glDeleteBuffers(1, &buffers[0]);

メモリは解放されておらず、調べてみたら、CUSTOM_VERTEXが大量にプロセスメモリを占領していました。
どういった処理をすれば、メモリを確保できるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

宣言しておいたvector配列で、メモリを大量に消費していたらしく
std::<CUSTOM_VERTEX>(verts).swap(verts)としてあげてメモリを解放しないとvectorは解放されないようです。
無事に解決いたしました。

投稿2016/09/08 22:06

seri

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問