আপনার প্রশ্নটি নির্দিষ্ট ধারণাটিকে বিভ্রান্ত বলে মনে হচ্ছে, তাই আসুন শীর্ষস্থান থেকে জিনিসগুলি নেওয়া। এটি ফাংশনটির সংজ্ঞা glTexImage2D
:
void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, void *data );
দুটি জিনিস রয়েছে যা আপনি "টেক্সচার ফর্ম্যাটস" কল করতে পারেন। প্রথমটি internalformat
প্যারামিটার। এই বাস্তব চিত্রের বিন্যাস যেমন OpenGL দোকানে এটি হিসাবে। format
পরামিতি পিক্সেল ডেটার বিন্যাস অংশ বর্ণনা করে আপনার সাথে প্রদান data
প্যারামিটার।
এটিকে অন্য কোনও উপায়ে রাখতে format
এবং আপনার ডেটা কেমন দেখাচ্ছে type
তা নির্ধারণ করুন । আপনি কীভাবে ওপেনজিএলকে আপনার ডেটা সঞ্চয় করতে বলছেন । আসুন আমাদের কল করুন এবং "পিক্সেল স্থানান্তর ফর্ম্যাট" করুন, যখন হবে "চিত্রের ফর্ম্যাট"।internalformat
format
type
internalformat
কোনও টেক্সচারের চিত্র বিন্যাস কখনই "বিজিআর 8" হতে পারে না । কোনও GL_BGR8 চিত্র বিন্যাসের গণক নেই। সেখানে হয় একটি GL_BGR enum, কিন্তু যে পিক্সেল স্থানান্তর ফরম্যাট, না ভাবমূর্তি পদ্ধতির জন্যে।
বা অন্যভাবে বলতে গেলে, আপনার পিক্সেল ডেটা যা আপনি ওপেনএল প্রদান করেন তা বিজিআর ক্রমে সংরক্ষণ করা যেতে পারে। তবে ওপেনজিএল বাস্তবায়ন কীভাবে প্রকৃতপক্ষে সেই পিক্সেল ডেটা সংরক্ষণ করবেন তা নিজেরাই সিদ্ধান্ত নেয়। হতে পারে এটি এটিকে সামান্য-এন্ডিয়ান ক্রমে সংরক্ষণ করে। এটি এটি বড়-এডিয়ান সংরক্ষণ করে stores হতে পারে এটি স্বেচ্ছায় বাইটগুলি পুনরায় সাজায়। আপনি জানেন না, এবং ওপেনজিএল এটির কোনও উপায় সরবরাহ করে না।
পিক্সেল ট্রান্সফার ফর্ম্যাট প্যারামিটারগুলির একটি নির্দিষ্ট সেট ওপেনজিএল বাস্তবায়নগুলি কীভাবে চিত্রের ফর্ম্যাটকে দেওয়া হয় সেগুলি কীভাবে সংরক্ষণ করবে তা মেলে কিনা তা বলার উপায় নেই।
সেখানে একটি উপায় এখন বলতে। এবং "এখন" দ্বারা, আমার অর্থ ওপেনজিএল 4.3 এবং / বা এআরবি_আন্তরের ফর্ম্যাট_কোয়ারী 2। আপনার কাছে একটি গ্রাফিক্স কার্ডে আসছে:
GLenum format, type;
glGetInternalformativ(texture_target, GL_RGBA8, GL_TEXTURE_IMAGE_FORMAT, 1, &format);
glGetInternalformativ(texture_target, GL_RGBA8, GL_TEXTURE_IMAGE_TYPE, 1, &type);
format
এবং type
এখন বাস্তবায়নের পছন্দসই format
এবং চিত্রগুলিতে কল type
ব্যবহার glTex(Sub)Image
করার জন্য GL_RGBA8
। ডাউনলোডের জন্য পৃথক format
এবং type
কোয়েরি রয়েছে glReadPixels
।
আপনি করতে পারেন অন্যান্য প্রশ্ন আছে ।
আপনার যদি এগুলিতে অ্যাক্সেস না থাকে তবে আপনি থাম্বের কয়েকটি সাধারণ নিয়ম ব্যবহার করতে পারেন যা বেশিরভাগ হার্ডওয়্যার মেনে চলবে:
- বিজিআরএ ক্রমে 8-বিট-প্রতি চ্যানেল ডেটার জন্য পিক্সেল ডেটা সঞ্চয় করবে। তাই আপনি যদি তাই হয়, আপনার পিক্সেল ডেটার সাথে বিন্যাস মেলে আরও দ্রুত জমিন তথ্য আপলোড করতে চান, আপনি ব্যবহার করতে চান
GL_BGRA
জন্য format
, এবং GL_UNSIGNED_INT_8888
বা GL_UNSIGNED_BYTE
জন্য type
।
- প্রকৃতপক্ষে 24-বিট রঙগুলিকে 24-বিট হিসাবে সংরক্ষণ করবে না। এটি সর্বদা তাদের 32-বিটগুলিতে প্যাড করবে; আলফা যখন ডেটা পড়বে তখন তা উপেক্ষা করা হবে। সুতরাং আপনি যদি ফর্ম্যাটের সাথে মেলে রাখতে চান তবে সর্বদা চিত্র ফর্ম্যাটগুলির
GL_BGRA
format
সাথে ব্যবহার করুন GL_RGB8
, এমনকি যদি আপনাকে আলফা উপাদানটিতে ডামি ডেটা রাখতে হয়।