Exemplo n.º 1
0
void ShaderGLES2::bind_uniforms() {
	if (!uniforms_dirty)
		return;

	// regular uniforms

	const Map<uint32_t, Variant>::Element *E = uniform_defaults.front();

	while (E) {
		int idx = E->key();
		int location = version->uniform_location[idx];

		if (location < 0) {
			E = E->next();
			continue;
		}

		Variant v;

		v = E->value();

		_set_uniform_variant(location, v);
		E = E->next();
	}

	// camera uniforms

	const Map<uint32_t, CameraMatrix>::Element *C = uniform_cameras.front();

	while (C) {
		int idx = C->key();
		int location = version->uniform_location[idx];

		if (location < 0) {
			C = C->next();
			continue;
		}

		glUniformMatrix4fv(location, 1, GL_FALSE, &(C->get().matrix[0][0]));
		C = C->next();
	}

	uniforms_dirty = false;
}
Exemplo n.º 2
0
void ShaderGLES2::bind_uniforms() {

	if (!uniforms_dirty) {
		return;
	};

	// upload default uniforms
	const Map<uint32_t,Variant>::Element *E =uniform_defaults.front();

	while(E) {
		int idx=E->key();
		int location=version->uniform_location[idx];

		if (location<0) {
			E=E->next();
			continue;

		}

		const Variant &v=E->value();
		_set_uniform_variant(location, v);
		//print_line("uniform "+itos(location)+" value "+v+ " type "+Variant::get_type_name(v.get_type()));
		E=E->next();
	};

	const Map<uint32_t,CameraMatrix>::Element* C = uniform_cameras.front();
	while (C) {

		int location = version->uniform_location[C->key()];
		if (location<0) {
			C=C->next();
			continue;
		}

		glUniformMatrix4fv(location,1,false,&(C->get().matrix[0][0]));
		C = C->next();
	};

	uniforms_dirty = false;
};