60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**
 | 
						|
 * Copyright (c) 2021 Dominic Masters
 | 
						|
 * 
 | 
						|
 * This software is released under the MIT License.
 | 
						|
 * https://opensource.org/licenses/MIT
 | 
						|
 */
 | 
						|
 | 
						|
#include "image.h"
 | 
						|
 | 
						|
void imageInit(image_t *image) {
 | 
						|
  image->quad.verticeCount = -1;
 | 
						|
  image->width = 1;
 | 
						|
  image->height = 1;
 | 
						|
  imageSetTexture(image, NULL);
 | 
						|
}
 | 
						|
 | 
						|
void imageSetTexture(image_t *image, texture_t *texture) {
 | 
						|
  imageSetTextureAndCrop(image, texture,
 | 
						|
    0, 0,
 | 
						|
    texture == NULL ? 0 : (float)texture->width,
 | 
						|
    texture == NULL ? 0 : (float)texture->height
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
void imageSetTextureAndCrop(image_t *image, texture_t *texture,
 | 
						|
  float x, float y, float width, float height
 | 
						|
) {
 | 
						|
  float u0, u1, v0, v1;
 | 
						|
  if(image->quad.verticeCount != -1) {
 | 
						|
    primitiveDispose(&image->quad);
 | 
						|
    image->quad.verticeCount = -1;
 | 
						|
  }
 | 
						|
  if(texture == NULL) return;
 | 
						|
 | 
						|
  u0 = x / texture->width;
 | 
						|
  u1 = u0 + (width / texture->width);
 | 
						|
  v0 = y / texture->height;
 | 
						|
  v1 = v0 + (height / texture->height);
 | 
						|
  
 | 
						|
  image->texture = texture;
 | 
						|
  quadInit(&image->quad, 0,
 | 
						|
    0,0,u0,v0,
 | 
						|
    1,1,u1,v1
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
void imageRender(image_t *image, shader_t *shader, float x, float y) {
 | 
						|
  if(image->texture == NULL) return;
 | 
						|
  shaderUsePositionAndScale(shader,
 | 
						|
    x,y,0,
 | 
						|
    0,0,0,
 | 
						|
    image->width, image->height, 1
 | 
						|
  );
 | 
						|
  shaderUseTexture(shader, image->texture);
 | 
						|
  primitiveDraw(&image->quad, 0, -1);
 | 
						|
}
 | 
						|
 | 
						|
void imageDispose(image_t *image) {
 | 
						|
  if(image->quad.verticeCount != -1) primitiveDispose(&image->quad);
 | 
						|
} |