f:id:brachiodesign:20161207180304j:image

青森でつけ麺食べるなら?と言われて思い浮かぶお店はいくつかありますが、多くの人が「とうぎょう」と言うのでは?

 

美味いのは当たり前として、「とうぎょう」の何に魅力を感じるか?

トッピングやサイドメニューがとても主張してくるので避けては通れないわけです。

チャーシューおにぎり

一番身体に悪い組み合わせは「ラーメン+ご飯」だと、どこかの偉い人がテレビで言ってた気がします。つけ麺大盛りを食べた後でも食べられるチャーシューおにぎり…最強過ぎます。

豊富なトッピング

前にトッピングを全部頼んだら麺を食べる前に腹一杯になってしまったことあります。チャーシューをトッピングするだけでも十分かもしれない。ほどほどに。

 

あなたはもっとやれる筈だ!

魅力を語ってきた訳ですが、魅力をそのまま受け入れ通い続ければ確実にデブになる訳です。(すでに十分デブですが…)

通うためには、日々の運動や食生活に気をつけなければならず、自己管理に集中せざるを得なくなり逆に痩せるはず。

とうぎょう通いダイエットをやれれば、お前はもっと次のステージに行けるはずだ!と言うメッセージを勝手に感じています。

 

とうぎょう (つけ麺 / 青森駅)
昼総合点★★★★ 4.0

三代目 J Soul Brothers from EXILE TRIBEがリリースしたアルバムをまとめました。

2011年の初アルバムからどのアルバムの曲を見ても、名曲揃い!

ライブで盛り上がる曲ばかり。

最近、三代目 J Soul Brothersを好きになった人も、ぜひ1stアルバムから聴いてみてください。

 

 

  

HiGH & LOW ORIGINAL BEST ALBUM

HiGH & LOW ORIGINAL BEST ALBUM(CD2枚組+DVD+スマプラ)

HiGH & LOW ORIGINAL BEST ALBUM(CD2枚組+DVD+スマプラ) 20%OFF

  • アーティスト: V.A.
  • 出版社/メーカー: rhythm zone
  • 発売日: 2016/06/15
 

THE JSB LEGACY

THE JSB LEGACY(CD+Blu-ray)

THE JSB LEGACY(CD+Blu-ray)

  • アーティスト: 三代目 J Soul Brothers from EXILE TRIBE
  • 出版社/メーカー: AMC
  • 発売日: 2016/03/30
  • メディア: CD
 

 

PLANET SEVEN

PLANET SEVEN (CD+DVD2枚組)

PLANET SEVEN (CD+DVD2枚組)

  • アーティスト: 三代目 J Soul Brothers from EXILE TRIBE
  • 出版社/メーカー: rhythm zone
  • 発売日: 2015/01/28
  • メディア: CD
 

THE BEST / BLUE IMPACT 

THE BEST / BLUE IMPACT (2枚組ALBUM+2枚組Blu-ray Disc) (通常盤)

THE BEST / BLUE IMPACT (2枚組ALBUM+2枚組Blu-ray Disc) (通常盤)

  • アーティスト: 三代目 J Soul Brothers from EXILE TRIBE
  • 出版社/メーカー: rhythm zone
  • 発売日: 2014/01/01
  • メディア: CD
 

MIRACLE

MIRACLE

MIRACLE

  • アーティスト: 三代目 J Soul Brothers
  • 出版社/メーカー: rhythm zone
  • 発売日: 2013/01/01
  • メディア: CD
 

TRIBAL SOUL

TRIBAL SOUL(DVD付)

TRIBAL SOUL(DVD付)

  • アーティスト: 三代目 J Soul Brothers
  • 出版社/メーカー: rhythm zone
  • 発売日: 2011/12/07
  • メディア: CD
 

J Soul Brothers

J Soul Brothers

J Soul Brothers

  • アーティスト: 三代目 J Soul Brothers
  • 出版社/メーカー: rhythm zone
  • 発売日: 2011/06/01
 

勝手に二代目襲名を決めてしまいましたが(笑)

 

決まりました!

とかではなく(笑)

そうだったらいいな、と

いや、そうなんじゃないか?!と思った、という話です。

 

 

さきほど、テレビを観ていて思ったんですよ。

 

 

スタジオパークからこんにちは

 

に長澤まさみさんがゲスト出演している回でした。

 

最終回を前にした真田丸特集な感じで、

真田幸村(信繁)役で主演の堺雅人さんからも、きり役の長澤まさみさんに対して色々ビデオメッセージが送られていました。

 

長澤まさみさんが「鬼ごっこ」をしたい!と言い出し、藤岡弘、さんを呼びたい!と言い出したから、その話は保留(というか受け流し)にしている

というのが面白かったです(笑)

 

藤岡弘、さんが来たらかなり本気なことになりそうで

それはもはや普通の鬼ごっこではないんだろう、と。

 

なるほど。。

 

他にも、きり役が長澤さんでよかったという話や(相性が良くて、二人で雰囲気を作ることができた)とか、きり役は歴史ではよくわかっていない人物なので長澤まさみさんが作ったキャラクターだ

という話とか。

 

 

その堺雅人さん語り口を聞いてて思ったんです。

 

この声の感じと、トーンが

どこかで聞いた、誰かに似てるかも…と。

 

そうだ!

古畑任三郎だ!

 

と(笑)

 

警部補 古畑任三郎 サウンドトラック Vol.2

警部補 古畑任三郎 サウンドトラック Vol.2

  • アーティスト: TVサントラ,本間勇輔,丸山和範,村田陽一
  • 出版社/メーカー: ポニーキャニオン
  • 発売日: 1996/02/07
  • メディア: CD
  • クリック: 39回
  • この商品を含むブログ (22件) を見る
 
古畑任三郎〈1〉 (扶桑社文庫)

古畑任三郎〈1〉 (扶桑社文庫)

  • 作者: 三谷幸喜
  • 出版社/メーカー: 扶桑社
  • 発売日: 1996/03
  • メディア: 文庫
  • 購入: 1人 クリック: 9回
  • この商品を含むブログ (8件) を見る
 

 

 

ゴールデンスランバー [DVD]

ゴールデンスランバー [DVD]

  • 出版社/メーカー: アミューズソフトエンタテインメント
  • 発売日: 2010/08/06
  • メディア: DVD
  • 購入: 7人 クリック: 288回
  • この商品を含むブログ (155件) を見る
 

 

古畑任三郎、人気ドラマだし、もっと続編も観たいけど、主演の田村正和さんがもう相当ご高齢で

あの役をやるのは難しそう。

 

でも、いずれもし誰かがあの役を引き継ぐことができたら、続編もありえるのか??

 

…と考えると、堺雅人さんは実は最適かもしれないなと思いました。

 

あえてマネをしなくても、あの感じ、

喋り方とか、変なこだわりありそうな雰囲気とか出せそうだし。

 

そういえば、古畑任三郎も、脚本は三谷幸喜さんなんですよね!?

 

そうなると本当に可能性がありそうな気がしてきました(笑)

 

もし堺雅人さんが古畑役をできたら、

新しい「警視正・古畑任三郎」とか観られるかもしれませんよね。

 

いやそれか、あえて若い頃ということで

「巡査部長・古畑任三郎」とか(笑)

 

 

まあでも、

すでに古畑任三郎もオリジナルシリーズからはかなり時間が経ってるので、

また新たに一から始めるのもありかなと思います。

 

堺雅人版・古畑任三郎

 

 

似たような刑事ドラマはその後もたくさん出てきてますが

 

結局、古畑ほど面白くはないんですよねえ。。

 

 

ぜひ!観たいです。

堺雅人の古畑任三郎。

 

 

あ!そしたら、

やっぱり、ロン毛?長髪??(笑)

 

そっちから想像すると…

 

え?キムタク??

になっちゃいそうですけど

SEVİLEN KANAL 7 DİZİSİ Bir Garip Aşk 84.-85. Bölüm Özeti (3-4 MART) günlerinde kaldığı yerden devam edecek. Sevilen ve çok beğenilen dizide bakalım bu hafta neler yaşanacak neler olacak izleyip görelim özetleri okuyalım.  Bir Garip Aşk 84.-85. Bölüm Özeti (3-4 MART)

Bir Garip Aşk 84. Bölüm Özeti
Arnav babannesinin pençesinden khushiyi kurtarıp elinden tutar ve odaya çeker götürür… fakat gece arnav eski hatıralar yüzünden üzgün vede ızdırap doludur onun bu ızdırabının farkında olan khushi onu neşenlendirmeye çalışsada başaramazz… Arnav tam giderken khushi seni kırmak istemedim sadece seni ızdırabını hafifletmek istiyorum der ve ne olursun bana anlat ne bu düşündüklerin…

英語が共通語の職場

f:id:nemie:20151230121447j:plain

外資系で英語が共通語の職場で働いている。

 

外国人がたくさんいて、日本人もみんな英語が話せる。

入社してしばらくは、「英語が苦手というと驚かれるってどんな環境?」と驚いていた。

 

しかし何年かたつとだんだん見えてきた。

実は影で苦労している人も多いと。

 

多くの日本人がインターネットブラウザのタブの1つで開いているページ。

それはアルクの英辞郎 on the web.

無料でオンラインで単語やフレーズを検索できるもの。

www.alc.co.jp

 

かなりの人が開いているのを見たことがある。

またはタブだけを見た。

 

目をつぶっているとネイティブじゃないか?と思わせる達人すらも、時々開いていてビックリする。

「知らない単語がない」なんて状態はありえないから、当然といえば当然か。

 

帰国子女や留学していた人も多いが、大人になってから英語を勉強した人もかなりいる。

コッソリ?英辞郎で単語や表現を調べて使っているのだ。

 

英辞郎プロ

 

私もヘビーユーザーで、常にタブの1つで開いている。

家でも会社でも電車の中でも毎日使うので、毎月300円払って英辞郎proを契約している。

 

有料版にするメリットはというと。

単語が5000個までタグ付きで登録できる!

(ちなみに無料版は100個までなのですぐ上限に達する。)

これに尽きる。

タグで「仕事」「海外ドラマ」「北米版ゲーム」などとつけておけば、あとでそれぞれのカテゴリーごとにざっと見返すことができる。

わざわざエクセルで単語帳を作らなくても、検索してそのまま「単語帳に登録」をクリックするだけでいい。

 

エクスポートまでできる。

ただ、英単語は意味まではエクスポートで出てこないので、あくまでも登録した単語リストができるというだけだ。

 

そのほか、広告がなくなるのでデザインがすっきりして見やすくなる。

これも嬉しい。

 

職場で電子辞書を使っている人はほとんど見かけない。

そっちのほうが正確なのだろうが、職場で使う英語はツールにすぎないのでそこまで正確でなくても用がたせればいい。

オンラインの英語辞書サービスは、何よりも手軽なので多くの人が使っているのだろう。

 

どんなに英語が上達しても常に知らない単語やフレーズは出てくる。

これからもありがたくみんなでお世話になる。

 

 

 関連記事

www.m-forest.net

 

 

クリスダAgain

2018/01/06

また、ジェムスキャディとクリスダに行ってきた。

先日、RBSCで一緒に回ったシニアセミプロに教えてもらった右側を突っ込ませない方法を実践。

前半は、結構できて2バーディ41。ちょっと低中弾道のフェードだが概ね真っ直ぐでいい感じ。

例によって後半、その教えも効かなくなり、だましだましで44だった。もう少し練習が必要かも。(´・ω・`)

あと、ショートが酷い状態。。パーがなし。どうしても左にひっかかりやすい。

もう使わないし売るつもりもなかったので、ジェムスキャディに自分が昔使っていたFT9+ツアーAD DIをあげた。

これが好調で43+44....

赤ティーからとはいえ、向こうがロングで10叩かなかったらヤバかった。。(゜o゜;

BessaflexTM

2018/01/06

f:id:moriburan:20141205081631j:plain

Leica M3, Summicron 50mm f/2 1st, tri-X

 

良いカメラだったが売ってしまった。

Bessaflex TMとは2003年にコシナの出したM42マウントの銀塩一眼レフである。

 

ファインダーは明るくて、ピントも合わせやすかった。

グリップもしやすかった。

絞り込み測光だが露出計もついていた。

電池なんてそこらに売っているくせに、メカニカルシャッターなのもうれしかった。

M42マウントのカメラはPENTAX SLを持ってるけど、Bessaflexの方が使いやすさは段違いに良かったように思う。

でも所有欲は満たせなかった。

そのうえライカM3を買ってからM42熱まで冷めてしまった。

なんだかんだでほとんど使わず仕舞いだった。

新宿の某カメラ屋で1万円になった。

 

帰りにローライフレックスを触って帰ってきた。

シャッター音がとても良かった。

ハッセルブラッドも触ってきた。

バフンバフン音をたてるシャッターにびっくりしたが、ファインダーはとてもきれいだった。

中判カメラが欲しくなった。

きっかけ

f:id:nemie:20161014081402j:plain

ホットヨガスタジオのキャンペーンでもらった燃焼サプリで汗だくになった。

「効くんだ!」と驚いて、自分でも市販のものを調べて使い分けている。

せっかく運動するのなら、ただの水よりももっと効果が出るものを飲みたいからだ。

写真は美温でもらった燃やしてスリム。

 

ホットヨガ

ホットヨガの時はヴァームウォーターパウダー。

VAAMは運動で体脂肪を燃やすためのもの。

ホットヨガのお供にピッタリ。

 パウダーをペットボトルの水に溶かして、ホットヨガ中に飲む。

するとすごい汗が出て効果を実感する。

アミノ酸は使った筋肉の回復を助けるそうだ。

 

アミノ酸1500mg

 

味はポカリみたい。

甘めでそこまでは美味しくないけど、「まずい!」という感じではない。

普通に飲める。

ヴァームウォーターパウダー グレープフルーツ味 5.5g×30袋

ヴァームウォーターパウダー グレープフルーツ味 5.5g×30袋

  • 出版社/メーカー: 明治
  • 発売日: 2014/02/24
  • メディア: ヘルスケア&ケア用品
  • この商品を含むブログを見る
 

 

ピラティス

ピラティスの時は、ヨガよりも筋肉を使うので強力なものを飲む。

 

ピラティスクラスの前後

アミノバイタルクエン酸チャージウォーターを飲む。

こちらは疲れをとるためのクエン酸がメイン。

アミノ酸1000mg

クエン酸3300mg

 

ペットボトルの水に溶かす。

味はそこまで美味しくはないけど、VAAMよりは飲みやすい。

レモン味らしい。レモン??という気がするが、柑橘系なのは間違いない。 

オレンジに近い黄色い液体になる。

アミノバイタル クエン酸チャージウォーター20本入箱

アミノバイタル クエン酸チャージウォーター20本入箱

  • 出版社/メーカー: 味の素
  • メディア: ヘルスケア&ケア用品
  • クリック: 3回
  • この商品を含むブログを見る
 

 

寝る前

ピラティスの日の夜寝る前には強力なものを飲む。

アミノバイタルプロである。

寝ている間に筋肉が回復するのを助けるため。

 

アミノ酸3600mg

 

翌日の筋肉痛が軽くなるそうだ。

私の場合、運動に慣れたのもあると思うけど、やっぱり筋肉痛が軽くなった気がする。

筋肉痛は辛いので、必死でちょっとでも楽になるようにしている。

 

これは、まずい!!(笑)

パウダーを喉の奥に水と一緒に流し込んで、味わわずに飲み込むのがいい。

初回、水に溶かして飲んだらまずすぎて吐きそうになった。

 甘いけど、なんだか変な味なのだ。

絶対水に溶かして飲むのはやめたほうがいい。

 

VAAM、クエン酸チャージウォーターに比べて、ダントツ値段が高い。

下手したら2倍ぐらいする。

とっておきの時 用なのだ。

 

アミノバイタル プロ 30本入箱

アミノバイタル プロ 30本入箱

  • 出版社/メーカー: 味の素
  • 発売日: 2010/04/09
  • メディア: ヘルスケア&ケア用品
  • 購入: 3人 クリック: 24回
  • この商品を含むブログを見る
 

 

まとめ

スポーツ以外の時も、「今日ちょっと疲れてるな」というときにクエン酸ウォーターやアミノバイタルプロを飲むことがある。

風邪のひきかけのときに飲む人もいるそうだ。

うまくサプリも取り入れて、運動効果を出したり、疲れを取っていきたい。

 

 

 

大量のatomic counterを使って色分布のヒストグラムを作りたい、と考えたときに普通の発想であれば配列化してしまえば良い、と考えますが、資料[1]によるとshader内でそのような書き方はできない、とあります。
どういうことなのか、見てみましょう。

まず、openGL側の関数を引数を足して、少し汎用化します。

// from here: http://www.lighthouse3d.com/tutorials/opengl-atomic-counters/

void create_a_buffer_for_atomic_counters(GLuint& buffer, int size = 1, int index = 0)
{
	glGenBuffers(1, &buffer);
	// bind the buffer and define its initial storage capacity
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
	glBufferData(GL_ATOMIC_COUNTER_BUFFER, sizeof(GLuint) * size, NULL, GL_DYNAMIC_DRAW);
	// unbind the buffer 
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, index);
}

void reset_the_atomic_counter_buffers(GLuint& buffer, int size = 1, int index = 0) {
	GLuint *userCounters;
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
	// map the buffer, userCounters will point to the buffers data
	userCounters = (GLuint*)glMapBufferRange(GL_ATOMIC_COUNTER_BUFFER,
		0,
		sizeof(GLuint) * size,
		GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_UNSYNCHRONIZED_BIT
	);
	// set the memory to zeros, resetting the values in the buffer
	memset(userCounters, 0, sizeof(GLuint) * size);
	// unmap the buffer
	glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);

	glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, index, buffer); // added important
}

void simpler_reset_the_atomic_counter_buffers(GLuint& buffer, int size = 1, int index = 0, int offset = 0) {
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);

	GLuint *a = new GLuint[size];
	memset(a, 0, size * sizeof(GLuint));
	glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, offset, sizeof(GLuint) * size, a);
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, index);

	glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, index, buffer); // added important
	delete[] a;
8}

void read_back_the_values_from_the_buffer(GLuint& acb, int* userVariables, int size = 1, int index = 0, int offset = 0)
{
	GLuint *userCounters;
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, acb);
	// again we map the buffer to userCounters, but this time for read-only access
	userCounters = (GLuint*)glMapBufferRange(GL_ATOMIC_COUNTER_BUFFER,
		(GLintptr)offset,
		sizeof(GLuint) * size,
		GL_MAP_READ_BIT
	);

	// copy the values to other variables because...
	for (int i = 0; i < size; i++) {
		userVariables[i] = (int)userCounters[i];
	}
	// ... as soon as we unmap the buffer
	// the pointer userCounters becomes invalid.
	glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);
}

void alternative_read_back_the_values_from_the_buffer(GLuint& buffer, int* userVariables, int size = 1, int offset = 0) {
	GLuint *userCounters = new GLuint[size];
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
	glGetBufferSubData(GL_ATOMIC_COUNTER_BUFFER, offset, sizeof(GLuint) * size, userCounters);
	glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, 0);
	for (int i = 0; i < size; i++) {
		userVariables[i] = (int)userCounters[i];
	}
}

次に、shaderのプログラムにヒストグラムカウントを書き足します。このコードは、正しくありませんので実行する必要はありません。

	string fragmentShaderProgram = STRINGIFY(
		#version 450 compatibility

		#extension GL_ARB_shader_atomic_counters : enable

		#extension GL_EXT_gpu_shader4 : enable


		layout(binding = 0, offset = 0) uniform atomic_uint atRed;
	layout(binding = 0, offset = 4) uniform atomic_uint atGreen;
	layout(binding = 0, offset = 8) uniform atomic_uint atBlue;

	layout(binding = 1, offset = 0) uniform atomic_uint myIntReds[256]; // このような書き方はできない

	uniform sampler2DRect tex0;

	in vec4 gl_FragCoord;
	out vec4 colorOut;

	void main() {
		vec2 pos = vec2(gl_FragCoord.x, gl_FragCoord.y); // テクスチャ上の座標を取得する

		float r = texture2DRect(tex0, pos).r;
		float g = texture2DRect(tex0, pos).g;
		float b = texture2DRect(tex0, pos).b;
		float a = texture2DRect(tex0, pos).a;

		if (r > 0.5) atomicCounterIncrement(atRed);
		if (g > 0.5) atomicCounterIncrement(atGreen);
		if (b > 0.5) atomicCounterIncrement(atBlue);

		int myIntRed = int(255.0 * r);
		atomicCounterIncrement(myIntReds[myIntRed]);    // これが動かない
		
		colorOut = vec4(r, g, b, a);
	}
	);

テスト用にコードをヒストグラム読み出し部分を適当に少し足します。

	alternative_read_back_the_values_from_the_buffer(myIntReds, reds, 256, 0);
	simpler_reset_the_atomic_counter_buffers(myIntReds, 256, 1, 0);

	int total_r = 0;
	cout << "rgb count=" << cnt[0] << ", " << cnt[1] << ", " << cnt[2] << std::endl;
	for (int i = 0; i < 256; i++) {
		cout << reds[i] << " ";
		total_r += reds[i];
	}
	cout << endl;
	cout << "total_r = " << total_r << endl;

この実行結果は次のようになります。

rgb count=376021, 307367, 232583
7892 3783 3359 3061 2629 1981 1615 1382 1459 1467 1248 1096 1057 1115 1235 1385
1550 1586 1718 1687 1682 1835 1935 1732 2161 2389 2205 1987 1767 1834 2068 2172
2262 2346 2496 2424 2433 2307 2201 2100 2310 2432 2833 2850 2733 2635 2548 2506
2640 2545 2430 2519 2800 3017 2999 2913 2957 2863 2797 2919 2741 2629 2606 2882
3006 3142 3070 3010 2866 2852 2791 2738 2631 2614 2952 3162 3255 3218 3281 3240
3262 3121 2968 3045 2985 3048 2936 2904 2784 2931 3256 3305 3345 3404 3496 3762
3736 3701 3673 3798 3818 3964 4087 3994 4313 4753 5354 5516 5438 5546 5543 6006
6266 6478 6180 6295 5983 5980 5763 5492 5302 5149 5151 5020 4973 4917 5057 5040
5244 5282 5130 5041 5094 5015 5120 5144 5026 5061 4963 4996 5198 5190 5219 5381
5372 5433 5693 5315 5543 5858 5471 5574 5635 5475 5377 5445 5303 5166 4675 4436
4240 4088 3786 3372 3223 2987 3021 2831 2753 2667 2788 2772 2706 2740 2532 2458
2461 2324 2288 2182 2192 2248 2253 2434 2516 2378 2311 2094 2067 2043 2088 1979
1951 1883 1964 2052 2092 2037 2096 1982 1898 1855 1835 1778 1818 1824 1879 1811
1822 1838 1795 1671 1682 1636 1669 1744 1770 1766 1749 1734 1791 1809 1800 1831
1868 1929 1837 1759 1688 1613 1570 1564 1483 1470 1414 1391 1346 1362 1322 1414
1439 1345 1309 1281 1302 1272 1169 1211 1243 1213 1274 1538 2622 4229 8019 8966

total_r = 786432

1024×768=786432です。あれ?????動いていそうですね?
本来は答えが不定のはずで、偶然でしょうか。。。
上手く動かない、が、この記事の結論のつもりだったのですが、困ったな。


追記:もうチョイましにするため、クラス化しました。

class AtomicCounterBuffer
	{
	public:
		AtomicCounterBuffer()
			: size(1), index(0), offset(0)
		{
			data.reserve(size);
		}

		~AtomicCounterBuffer()
		{
			data.clear();
			glDeleteBuffers(1, &buffer);
		}

		// アトミックカウンタバッファの作成
		void create(int sz, int idx, int off)
		{
			// パラメータの設定
			size = sz;        // バッファのサイズ
			index = idx;      // マウント先のインデックス
			offset = off;     // マウント先のメモリオフセット
			data.resize(sz);

			// バッファの作成
			glGenBuffers(1, &buffer);
			// bind the buffer and define its initial storage capacity
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
			glBufferData(GL_ATOMIC_COUNTER_BUFFER, sizeof(GLuint) * size, NULL, GL_DYNAMIC_DRAW);
			// unbind the buffer 
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, index);
		}

		// カウンタを全てゼロにリセット
		void reset() {
			GLuint *userCounters;
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
			// map the buffer, userCounters will point to the buffers data
			userCounters = (GLuint*)glMapBufferRange(GL_ATOMIC_COUNTER_BUFFER,
				0,
				sizeof(GLuint) * size,
				GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_UNSYNCHRONIZED_BIT
			);
			// set the memory to zeros, resetting the values in the buffer
			memset(userCounters, 0, sizeof(GLuint) * size);
			// unmap the buffer
			glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);

			glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, index, buffer); // added important
		}

		// カウンタを全てゼロにリセット
		// reset関数と同じ
		void simpler_reset() {
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);

			GLuint *a = new GLuint[size];
			memset(a, 0, size * sizeof(GLuint));
			glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, offset, sizeof(GLuint) * size, a);
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, index);

			glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, index, buffer); // added important
			delete[] a;
		}

		// カウンタ値を読み出してベクターに格納
		int* read_back()
		{
			GLuint *userCounters;
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
			// again we map the buffer to userCounters, but this time for read-only access
			userCounters = (GLuint*)glMapBufferRange(GL_ATOMIC_COUNTER_BUFFER,
				(GLintptr)offset,
				sizeof(GLuint) * size,
				GL_MAP_READ_BIT
			);

			// copy the values to other variables because...
			for (int i = 0; i < size; i++) {
				data[i] = (int)userCounters[i];
			}
			// ... as soon as we unmap the buffer
			// the pointer userCounters becomes invalid.
			glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);

			return data.data();
		}

		// カウンタ値を読み出してベクターに格納
		// read_back関数と同じ
		int* alternative_read_back() {
			GLuint *userCounters = new GLuint[size];
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buffer);
			glGetBufferSubData(GL_ATOMIC_COUNTER_BUFFER, offset, sizeof(GLuint) * size, userCounters);
			glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, 0);
			for (int i = 0; i < size; i++) {
				data[i] = (int)userCounters[i];
			}
			delete[] userCounters;

			return data.data();
		}

		// dataの参照を直接返す
		std::vector<int>& values() {
			return data;
		}

	protected:
		GLuint buffer;
		std::vector<int> data;
		int size;
		int index;
		int offset;
	};


[1] http://www.lighthouse3d.com/tutorials/opengl-atomic-counters/

へうげもの9

2018/01/06

利休死す。
野心というのは厄介なもんだな。

へうげもの(9) (モーニング KC)

へうげもの(9) (モーニング KC)

  • 作者: 山田芳裕
  • 出版社/メーカー: 講談社
  • 発売日: 2009/07/23
  • メディア: コミック
  • 購入: 9人 クリック: 150回
  • この商品を含むブログ (112件) を見る