예제 #1
0
void Mesh::onDraw() {
	if (mIBO) {
		/* Perform index drawing */
		glDrawElements(mRenderMode, mIBO->getElements(),
		               GL_UNSIGNED_INT, reinterpret_cast<GLvoid*>(0));
		FLOG_CHECK("glDrawElements failed");
	} else {
		/* Perform array drawing */
		glDrawArrays(mRenderMode, 0, mVBO->getElements());
		FLOG_CHECK("glDrawArrays failed");
	}
}
예제 #2
0
GLuint TQuery<target>::getResultAsync(GLuint resultIfNotAvailable, GLuint id) {
	GLuint result;
	glGetQueryObjectuiv(mHandles[id], GL_QUERY_RESULT_AVAILABLE, &result);
	FLOG_CHECK("Could not get querry result state");
	if (result) {
		glGetQueryObjectuiv(mHandles[id], GL_QUERY_RESULT, &result);
		FLOG_CHECK("Could not get query async result");
		return result;
	} else {
		return resultIfNotAvailable;
	}
}
예제 #3
0
void Framebuffer::attachTexture2D(
		GLenum attachment,
		GLenum target,
		GLuint textureHandle) {
	glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, target, textureHandle, 0);
	FLOG_CHECK("Attach texture to framebuffer failed");
}
예제 #4
0
void Framebuffer::attachTexture2DDraw(
		GLenum attachment,
		GLenum target,
		GLuint textureHandle) {
	glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, attachment, target,
			textureHandle, 0);
	FLOG_CHECK(
			"attachTexture2DDraw failed. attachment: 0x%x, target: 0x%x, handle: 0x%x",
			attachment, target, textureHandle);
}
예제 #5
0
void Mesh::drawOcclusionBox(ICamera& camera) {

	mProgramOQ->use();

	core::Uniform::push(mULCMVPOcclusion,
	                    camera.getViewProjection() * mPhysicsMMC * mOcclusionMatrix);

	mOcclusionQuery.begin();

	glDrawArrays(mRenderMode, 0, gOQVertices);

	FLOG_CHECK("drawOcclusionBox failed");

	mOcclusionQuery.end();

	core::Program::disusePrograms();
}
예제 #6
0
void Texture2D::sendData(Texture2DFileData data) {
	if (data) {
		mFile->mData = data;
	}
	if (mFile->mConfig.mCompression) {
		glCompressedTexImage2D(mTarget, mFile->mConfig.mMipmapsLevel,
				mFile->mHeader.mInternalFormat, mFile->mHeader.mWidth,
				mFile->mHeader.mHeight, mFile->mConfig.mBorder,
				mFile->mConfig.mCompressionSize, (GLubyte*) mFile->mData);
	} else {
		glTexImage2D(mTarget, mFile->mConfig.mMipmapsLevel,
				mFile->mHeader.mInternalFormat, mFile->mHeader.mWidth,
				mFile->mHeader.mHeight, mFile->mConfig.mBorder,
				mFile->mHeader.mFormat, mFile->mHeader.mType,
				(GLubyte*) mFile->mData);
	}
	FLOG_CHECK("send data");
}
예제 #7
0
void TQuery<target>::end() {
	glEndQuery(mTarget);
	FLOG_CHECK("Could not end query");
}
예제 #8
0
void Framebuffer::bindForWriting(GLuint id) const {
	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mHandles[id]);
	FLOG_CHECK("glBindFramebuffer GL_DRAW_FRAMEBUFFER");
}
예제 #9
0
TQuery<target>::~TQuery() {
	glDeleteQueries(mHowMany, mHandles);
	FLOG_CHECK("Could not delete query");
}
예제 #10
0
void TQuery<target>::begin(GLuint id) {
	glBeginQuery(mTarget, mHandles[id]);
	FLOG_CHECK("Could not begin query");
}
예제 #11
0
void VertexArray::unbind() {
	glBindVertexArray(0);
	FLOG_CHECK("ould unbind the VAO");
}
예제 #12
0
Sampler::Sampler(GLint textureUnit, GLuint howMany)
		: GLObject(howMany), mTextureUnit(textureUnit) {
	glGenSamplers(mHowMany, mHandles);
	FLOG_CHECK("ERROR: Could not generate sampler -> ID");
}
예제 #13
0
void Texture2D::generateMipMaps() {
	if (mFile->mConfig.mMipmaps) {
		glGenerateMipmap(mTarget);
		FLOG_CHECK("generateMipMaps");
	}
}
예제 #14
0
VertexArray::~VertexArray() {
	glDeleteVertexArrays(mHowMany, mHandles);
	FLOG_CHECK("Could not delete the VAO");
}
예제 #15
0
void Sampler::setParameter(Parameter parameter, GLuint id) {
	glSamplerParameteri(mHandles[id], parameter.first, parameter.second);
	FLOG_CHECK("setParameter");
}
예제 #16
0
void Sampler::reload() {
	glGenSamplers(mHowMany, mHandles);
	FLOG_CHECK("reload");
}
예제 #17
0
void Sampler::setParameter(GLenum parameter, GLenum value, GLuint id) {
	glSamplerParameteri(mHandles[id], parameter, value);
	FLOG_CHECK("setParameter: 0x%x", parameter);
}
예제 #18
0
void Sampler::unbind(GLuint id) {
	glBindSampler(0, mHandles[id]);
	FLOG_CHECK("Could not bind the VAO");
}
예제 #19
0
void Sampler::bind(GLuint id) {
	glBindSampler(mTextureUnit, mHandles[id]);
	FLOG_CHECK("Could not bind the Sampler");
}
예제 #20
0
GLuint TQuery<target>::getResultSync(GLuint id) {
	GLuint result;
	glGetQueryObjectuiv(mHandles[id], GL_QUERY_RESULT, &result);
	FLOG_CHECK("Could not get querry sync result");
	return result;
}
예제 #21
0
void Framebuffer::bindForReading(GLuint id) const {
	glBindFramebuffer(GL_READ_FRAMEBUFFER, mHandles[id]);
	FLOG_CHECK("glBindFramebuffer GL_READ_FRAMEBUFFER");
}
예제 #22
0
VertexArray::VertexArray(GLuint howMany)
		: GLObject(howMany) {
	glGenVertexArrays(mHowMany, mHandles);
	FLOG_CHECK("Could not generate the VAO");
}
예제 #23
0
void TQuery<target>::reload() {
	glGenQueries(mHowMany, mHandles);
	FLOG_CHECK("reload");
}
예제 #24
0
void VertexArray::bind(GLuint id) {
	glBindVertexArray(mHandles[id]);
	FLOG_CHECK("Could not bind the VAO");
}
예제 #25
0
TQuery<target>::TQuery(GLsizei howMany) :
	GLObject(howMany) {
	glGenQueries(mHowMany, mHandles);
	FLOG_CHECK("Could not create query");
}
예제 #26
0
void VertexArray::reload() {
	glGenVertexArrays(mHowMany, mHandles);
	FLOG_CHECK("reload");
}
예제 #27
0
void Framebuffer::reload() {
	glGenFramebuffers(mHowMany, mHandles);
	FLOG_CHECK("Reloading");
}