[過去ログ] C/C++ゲーム製作総合スレッド Part6 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: 2014/07/08(火)19:30 ID:J+zVqUil(1) AAS
ゲーム製作におけるC/C++全般に関するスレです。
元スレ
DXライブラリ 総合スレッド その17
2chスレ:gamedev
前スレ
C/C++ゲーム製作総合スレッド Part1
2chスレ:gamedev
省8
921(1): 2014/12/25(木)08:08 ID:MJlq1Aj4(2/4) AAS
>>920
質の悪いGCを使っているか、単に使い方をミスってるだろ
922(1): 2014/12/25(木)08:15 ID:MJlq1Aj4(3/4) AAS
>>915
ちょっと違う じゃねーよ
確保する場所がスタック上かヒープ上かの違いだけじゃねーか
923: 2014/12/25(木)08:54 ID:wubB5pdO(1) AAS
>>921
GCって最初は親切だけど、結局面倒臭いものなんだね
メモリ管理をする手間は変わらないじゃん
924: 2014/12/25(木)10:29 ID:Y3U3uktg(1) AAS
GCで最も困るのはメモリ解放時のStop the Worldだが
v8は少ないと思う
925: 2014/12/25(木)12:54 ID:MhE4palG(1) AAS
どっちがいいなんてアプリケーションによるんじゃね?
926: 2014/12/25(木)14:31 ID:+bLp0IG7(2/2) AAS
速度重視のゲーム開発でGCなんて重い物動かす余裕はないね
結構色々なゲームで使うA*だけでもそれなりに食うってのに
927: 2014/12/25(木)15:29 ID:ZzsGRtB9(1) AAS
使うタイミングと量を間違えなければ、特に問題にならない気がするけどなあ
928(1): 2014/12/25(木)16:21 ID:qeWu8Kkf(1) AAS
メディエイターパターンでshared_ptr使った場合ってメモリリークするの?
929: 2014/12/25(木)21:11 ID:ICmaagKn(1) AAS
>>928
ん、学校の宿題?違うなら以下の逆質問に答えてみてくれないか?
@ shared_ptrの典型的実装は何
A @でメモリリークする場合の典型的原因は何
B mediatorの目的は何
C BはAを誘発する方向に作用するか
mediator使ってAを招いてメモリリークさせる男の人ってどう思う?
930(1): 2014/12/25(木)21:30 ID:0+lNtng/(3/5) AAS
>>922
違うわ
普通はやらんがスタック上でも別にスレッドで使えるわ
確保する場所の話をしてるんじゃねぇ
デストラクタを呼んだ時の振舞の違いを言っとるんだ
931: 2014/12/25(木)21:47 ID:MJlq1Aj4(4/4) AAS
>>930
「デストラクタが呼ばれ方」の話だったはずが、いつの間にか「呼んだ時の振舞」に摩り替わっている。
具体例まで挙げないと、君の話は他人には理解できないぞ。
932: 2014/12/25(木)22:18 ID:rdtwM2Em(1) AAS
そして呼んだ時の振る舞いって話だったとしてもイミフメー
そもそも配置newしないかぎり自分でデストラクタを呼ばないし。どんどん謎な方向へ。
933: 2014/12/25(木)22:24 ID:0+lNtng/(4/5) AAS
生のデストラクタを呼ぶってのは俺の中じゃ、単にdelete xのこと
スレッド使ってたら↑みたいなのは管理が面倒なので使えないっしょ。それだけの話
で、参照カウンタを使ってデストラクタ呼ぶか、マーク&スイープみたいな仕組みでデストラクタを呼ぶか
その振る舞いが違うけど、俺は循環参照に気を使って設計しないといけないのは、やだなぁと言っただけ
そもそも深い話でも続けるような内容でも何でもないだが
934: 2014/12/25(木)22:27 ID:0+lNtng/(5/5) AAS
ちなみに>>908は>>905宛て
935: 2014/12/26(金)11:43 ID:IXxiiBMK(1) AAS
よくわかんないけど「手動でデストラクタを呼ぶ」じゃダメだったん?
936: 2014/12/26(金)16:51 ID:xlNeQ6wG(1) AAS
自動化の権化プログラムを扱う人にとって自動化はロマン
特に多くの人がつまづく面倒くさい処理を自動でやってくれるって素敵やん?
解放処理を描かずに済む分コードも減るし、初心者やうっかりさんにやさしいし
世の中にはそういうできる限り完全自動にこだわる人もいるのです
細かい個別の事案にまで高速に対処できる高い能力を持ったオートデストラクタなんて、
それこそマイクロソフト並の巨大企業が本腰入れてデータ集めないと完成まで何年かかるか分からないレベル
消すには消せるが処理速度に影響を与えて邪魔で使えなかったりすればゴミだし
937: 2014/12/26(金)18:51 ID:9MuNlFH5(1) AAS
演算能力が頭打ちになりそうな昨今、プログラマが殴られるのが規定路線。
自分で何とかしろ、ってこと。
RAIIで十分じゃない。
938: 2014/12/28(日)12:00 ID:DVHfXhJL(1/2) AAS
クラスのポインタ変数をdeleteした後、
そのポインタ変数にNULLを入れて他の処理でNULLチェックをしてぬるぽ回避してるんですが、
逆に言えばdeleteした後NULLを入れてないとぬるぽ回避できないということで、
一般的に職業プログラマではどういうふうにdeleteした変数を識別してるんでしょうか?
939: 2014/12/28(日)12:24 ID:5FK2L+6G(1) AAS
生ポインタよりもスマートポインタを使うのが一般的じゃねーの
940: 2014/12/28(日)13:58 ID:dAYPhj1N(1) AAS
生ポインタの場合
#define SAFE_RELEASE(p) { delete p; p = NULL; }
みたいなマクロ使ってるのを見たことある
俺の趣味プログラミングだとshared_ptrやunique_ptr使ってる
boolへの型変換が定義されてるから普通のポインタみたいに
if (p) { /* スマートポインタが有効だった時の処理 */ }
とかできるし
941: 2014/12/28(日)14:54 ID:DVHfXhJL(2/2) AAS
みんなスマポなんですか
まぁ生ポインタと同じように扱えるならそっちのほうがいい感じですか
代入で参照カウントが増えるのはオペレーターとかいうやつですか
942(1): 2014/12/28(日)18:56 ID:uPxHRIHV(1) AAS
俺はあんまりスマポは使わないな
ちょっと作ったらテストしてリークしてたらメッセージでるし、
deleteのタイミングが難しい場合ぐらいしかスマポ使わないよ。
ポインタ変数なんか、ほとんどの場合どっかのクラスのメンバーに
なってるからデストラクタでdeleteするようにしてるし
943: 2014/12/28(日)20:49 ID:KLVWt4ts(1) AAS
マウスカーソルを対象の位置に置いてマウスホイールで対象にズームするような機能をつけたいのですが
どのように実装すれば良いでしょうか
Siv3Dを使っています
944(1): 2014/12/28(日)20:55 ID:ToxqMv2l(1) AAS
素朴な疑問なんだけど、ワープロやグラフィックソフトのオブジェクトと違って
ゲーム中に出現するキャラクタの数は大体決め打ちできるんじゃないの。
Cの作法に則って毎回newして確保するんじゃなくて、例えば1オブジェクト最大256バイト、
80体まで出現するならchar slot[256*80]のような形で生メモリ領域をあらかじめ確保しておいて、
ふだんはp = (Actor*)&slot[256*n]; if (p->Exists) { p->Act(); }でいい気がするんだけど。
もちろんActorは基底クラスで、必要でない時はp->Exists = falseにする。
作成時はnewでなくスタック上でコンストラクタ呼び出して、領域に内容丸ごとコピー。
省1
945: 2014/12/28(日)20:57 ID:R8bFfUbq(1) AAS
FlyWeightパターンとかもある
946: 2014/12/28(日)21:15 ID:vMYsGefx(1) AAS
>>944
動的メモリ確保はパフォーマンスへの影響が大きいので、
可能な限りは最大出現数分の配列を確保しておく。
947: 2014/12/28(日)22:21 ID:D5X5qYnm(1) AAS
むしろそんなに重要な物なら絶対に常時必要分確保しないといかんと思うけど
他のジャンルならともかく、敵が出るたびになんだかカクつくSTGなんか嫌だぞ
948: 2014/12/29(月)00:30 ID:gxX17JP7(1) AAS
逆に、例えば「格闘ゲームにおけるキャラクタ選択画面」なんかは
その画面にいる間オブジェクトは一定だろうから >>942 方式で十分だと思う。
そう考えるとゲームの場合、シミュレーションとか特殊なルールでオブジェクト数に
上限を設けたくないとかでなければポインタ制御は簡素に纏める方向でいいと思うんだわ。
949: 2014/12/29(月)00:45 ID:Ue1eh9PX(1) AAS
まぁ、無理にスマポ使う必要はないと思うけど、
スマポを知って感動して以降、newするものやopen/close系のものは余程でない限りはRAIIで書くようにしてたら、
deleteを書くことが(ほぼ)なくなった。
当然、メモリリークもゼロ。
RAIIを知った前後でプログラムの規模・品質が雲泥の差になったわ。
950: 2014/12/29(月)01:07 ID:0UxFRGu4(1) AAS
今は、boostにスマポも入っているだろ
951: 2014/12/29(月)01:44 ID:32D0f9iV(1) AAS
memoryとの違いがわからん
952: 2014/12/29(月)07:13 ID:aw7mXH6p(1/2) AAS
今最新のVSに入ってるC++も当然11だよな?スマポ余裕で使えるじゃん boost不要
953: 2014/12/29(月)11:06 ID:UPrXKgd4(1) AAS
リークするのはてめえの脳みそだけにしておけ
954: 2014/12/29(月)18:43 ID:aw7mXH6p(2/2) AAS
うん?現行最新のVSなら3種類の型が使えるだろ?実質2種類だけど
VS以外を使っていたりとかVS標準スマポの仕組みや性能が気に入らないってのは知らない
っつーかな、書き落としはリークじゃなくね
955(1): 2014/12/30(火)03:36 ID:vvze8R+p(1) AAS
データの圧縮や解凍ってどうやってる?
簡単な圧縮かけた方がファイルからデータに展開するのも早いし、
(ファイルの読み書きの速度と展開速度を天秤にかけた)
解析する人にとっても多少は面倒になるかな?と思って
GPLとかに感染しないのがあると良いな
やっぱ、自力でやるしか無い?
956: 2014/12/30(火)03:46 ID:W5CPlMBg(1) AAS
>>955
zlib
957: 2014/12/30(火)04:01 ID:bdHUCtIv(1) AAS
バイナリ全部繋げてcueファイルにインデックスいれときゃいんじゃね
958: 2014/12/30(火)08:13 ID:swhFWkgZ(1) AAS
今使うならLZ4かな
959: 2014/12/30(火)09:05 ID:6MynlDel(1) AAS
色々な言語のライブラリあるしBSDだし良さそうやね
圧縮率あって高速ってのは魅力的だわ
960: 2014/12/30(火)09:25 ID:HpQ+h6E5(1/2) AAS
圧縮済みの画像や音声なら無圧縮形式のほうが良いかもね。
mmapして切り出せばメモリ確保も要らない。
961: 2014/12/30(火)18:48 ID:UWJ4OXBN(1) AAS
mmapのほうがreadより速いという迷信について - kazuhoのメモ置き場
外部リンク:d.hatena.ne.jp
962: 2014/12/30(火)23:03 ID:HpQ+h6E5(2/2) AAS
誰もCPUキャッシュやディスク先読みのレベルでのmmapの速度の話なんかしてねーよ
963: 2014/12/31(水)10:36 ID:rJyBxJIf(1) AAS
メモリ節約って何だよ
ファイルの内容なんてデコードしたらすぐ捨てるだろ
そんな回りくどいことしないで普通に読み込めばいい
サーバーにおいて複数のプロセスから同じファイルの内容を読み込む時なんかは
読み込み用のバッファが要らなくなるからメモリ節約に繋がるらしいが
殆どのケースで速度が遅くなるだけだから使う理由が無い
964: 2015/01/01(木)16:48 ID:jkRIISMU(1/2) AAS
class TestClass {
private:
// 型 m_funcArray;
void FuncA();
void FuncB();
void FuncC();
public:
省13
965(1): 2015/01/01(木)18:08 ID:cWuPuXeC(1/2) AAS
言語仕様的にどこまで正しいかわからんけど
class CTestClass {
private:
void (CTestClass::*m_pFunc[3]) ();
void FuncA();
void FuncB();
void FuncC();
省6
966(1): 2015/01/01(木)18:10 ID:cWuPuXeC(2/2) AAS
呼び出しはこうな
void Exec( int i ) {
(this->*(m_pFunc[i])) ();
}
967: 2015/01/01(木)18:29 ID:jkRIISMU(2/2) AAS
>>965-966
ありがとうございます
なるほど*はその位置につけるんですか
968: 2015/01/02(金)17:10 ID:dGIIjPDH(1/2) AAS
enum class Signals {
RED,
GREEN,
BLUE
}
void func(Signals signal) {
if (signal == Signals::RED) {
省6
969: 2015/01/02(金)17:16 ID:nBM88kHl(1) AAS
void main を int main に変更
970: 2015/01/02(金)17:47 ID:dGIIjPDH(2/2) AAS
関係ない所のエラーでしたすみません
971(1): 2015/01/04(日)15:42 ID:8cIsCjgM(1) AAS
ifstream::read(buff,filesize)で読み込んだ文字列を表示すると
末尾にEOFらしき文字化けした文字があってXML等のパースに失敗するんですが
filesizeを-1してreadしたり、読み込んだchar*の末尾のEOFと思われる要素に\0をいれて回避しているんですが
根本的な解決方法がわかりません
どうしたらいいですか
972: 2015/01/04(日)16:06 ID:Ep14vw0N(1) AAS
>>971
filesize 数ぶんの文字が無かったんだろう。
入力バッファ末尾の未初期化の領域が見えているだけ。
改行コードの変換 \r\n --> \n とかでちょうど1文字減ってるんじゃないの?
バイナリモードで読めば、たぶんファイルサイズと文字数が一致するはず。
その後の処理が \r\n に対応してないといけないけど。
テキストモードで読みたいなら、istream_iterator を使うのが定番かな。
973: 2015/01/05(月)13:29 ID:61MXvLfY(1) AAS
終端文字の文字数って2文字じゃなかったっけ?
974: 2015/01/05(月)13:52 ID:+omNtWXl(1) AAS
buff全体を0クリアしてreadすればいいだけ
他の方法はgetで一文字づつ読みつつeofチェック
ファイルが全てメモリに置いても問題ないサイズならstd::stringとoperator>>で全部一度に取得
好きなの選べ
975: 2015/01/06(火)11:25 ID:BevxLkoj(1) AAS
外部リンク[html]:murakan.cocolog-nifty.com
なんかeofまで読み込むのはifstreamの仕様らしいですね
976: 2015/01/06(火)18:08 ID:+D28bBOU(1) AAS
そりゃeofまで読まないとどこが終端なのか分からないし…
977(2): 2015/01/07(水)13:02 ID:NiXFoaGk(1) AAS
横からすいません、質問です。
外部リンク:www1.axfc.net
ソフトウェア3DCGライブラリを作っているのですが、
80万ポリゴン/秒(C2D E8400 OC 3.6GHz上&フラットシェーディング&テクスチャマッピングなし)
しか出ません。ソフトウェアレンダリングってこんなものなんですか?
978: 2015/01/07(水)18:26 ID:PQ5kLSMd(1/2) AAS
何で今時ソフトウェアレンダラー
979: 2015/01/07(水)18:57 ID:vA0pKoe4(1) AAS
>>977
DirectXのリファレンスドライバでメッシュを表示する適当なもの作ってそれと比較してみたら?
980: 2015/01/07(水)20:29 ID:PQ5kLSMd(2/2) AAS
ソフトウェアレンダラーにしたってMesaとかIrrlichtのソフトウェアレンダラーとかが既にあるのに
車輪の再開発じゃない?
外部リンク:en.wikipedia.org
外部リンク:irrlicht.sourceforge.net
981: 2015/01/07(水)22:42 ID:Wqt7oMn8(1) AAS
GT3D_drawpoly_fill_sub()を流し読みしたけど、多角形描画は普通っぽかったし
このプログラム自体は特に速度をどうこうしているものではないようですね。
ちょっと見ただけだけどソースは一部ですよね
SSEとかも使ってないし、マルチスレッドでもないですよね
描画対象はメモリ? に一旦描画している感じなのかな
描画範囲を分割してマルチスレッドにしてはどうですか?
982: 2015/01/08(木)20:42 ID:Mw182kRW(1) AAS
メモリ速いやつに差し替えようぜ
983: 2015/01/08(木)22:06 ID:7iBzssXL(1) AAS
MSの最新技術の粋を集めたWARPに敵うはずがない
984: 2015/01/08(木)22:18 ID:5+CLNQq0(1) AAS
WARPはSIMDも使ってるはずだよね。
985: 2015/01/09(金)13:53 ID:VWlQDlh6(1) AAS
SSE2必須で使える場合SSE4.1まで使ってるとかなんとか
986(2): 2015/01/09(金)17:34 ID:Iw10L3cl(1) AAS
>>977 です。
ちょっとSSE勉強してみます。
今更ソフトウェアレンダラなのは
自分で作れば最小限の機能になって使いやすいと思ったからです。
自作OSへの転用も簡単ですし。
SSE版は別プロジェクトでやってみます。
987: 2015/01/09(金)17:49 ID:6dSDlYuJ(1) AAS
SSEより完成目指せ。
効率よく使ったとして数%の成績アップだ。体感では違いがないとかなりうる。
988: 2015/01/09(金)18:21 ID:YwByCpOo(1) AAS
>>986
何その理由
普通にOpenGLかDirect3Dで良いじゃん
自作OSってふざけてんの?
989: 2015/01/10(土)06:38 ID:FMkme2Bg(1) AAS
>>986
面白い物好きが来たな
OS作るのがメインでゲーム作りがサブなのか
目指すは究極のマルチプラットフォーム?
あるいは新しい3D環境でも作り出したいのかな?
レイトレーシングという概念を勉強すると、また新しい世界が見えるかも?
990: 2015/01/10(土)10:07 ID:JC3btUBL(1) AAS
自前でできるといいと思うよ。
その後、FPGAに実装したらさらに楽しいと思う。
991: 2015/01/10(土)10:28 ID:XEF52+tX(1) AAS
中身自作するにしてもAPIはOpenGLにあわせたものも作った方が良いと思うけどね。
自作物のパフォーマンスがどれだけ酷いか解るし。
まぁ趣味なんだろうから好きにしたら良いと思うけど。
992(1): 2015/01/11(日)00:41 ID:EFs4nj8K(1) AAS
き、きっと将来のビル・ゲイツを目指しているんだよ!
オペレーション・システムそのものの開発ときたか
夢がデカすぎて全体像が見えない
993(1): 2015/01/11(日)00:44 ID:IZj/cFBq(1/2) AAS
実用性はさておき、自分で一通り作れたら最高に感動できるだろうな。
がんばってくれ。
994: 2015/01/11(日)00:50 ID:2AMxCLe9(1) AAS
お前ら東大の名物科目CPU実験くらいは知っといたほうがいいぞ
986がそうとは思わないがな
995: 2015/01/11(日)06:09 ID:vPB1OoJW(1) AAS
WARPって必要な部分だけソフトウェアで補うとかじゃなくって
全部ソフトウェアになるのか
996: 2015/01/11(日)09:26 ID:DORzARTJ(1) AAS
>>992-993
実はOSの方は既にある程度出来てまして・・・w
「三十日でできる!OS自作入門」のはりぼてOSをもとに作ってます。
ちなみにソフトウェアレンダラに至った経緯は
OS作った
↓
それでゲーム作りたい
省8
997(1): 2015/01/11(日)10:21 ID:RDQlUyF+(1) AAS
次スレ立てたよ
C/C++ゲーム製作総合スレッド Part7 [転載禁止]?2ch.net
2chスレ:gamedev
998: 2015/01/11(日)10:39 ID:IZj/cFBq(2/2) AAS
>>997
乙〜!
やっぱゲームプログラミングは一番楽しいぜ。
999: 2015/01/11(日)18:55 ID:9XLW+JE+(1) AAS
自作OSとか本人は楽しいんだろうけど
1000: 2015/01/11(日)19:08 ID:+gxvr94o(1) AAS
本人が楽しいなら十分だろ
1001: 1001 Over 1000 Thread AAS
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.199s*