#ifndef GRAPHING_TEXTURE_H
#define GRAPHING_TEXTURE_H
#include "LinearMath/btAlignedObjectArray.h"

struct GraphingTexture
{
	int m_textureId;
	//assume rgba (8 bit per component, total of 32bit per pixel, for m_width*m_height pixels)
	btAlignedObjectArray<unsigned char> m_imageData;
	int m_width;
	int m_height;
	
	GraphingTexture();
	virtual ~GraphingTexture();
	
	bool create(int texWidth, int texHeight);
	void  destroy();
	
	void setPixel(int x, int y, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha)
	{
		if (y>=0 && y<m_height && x>=0 && x<m_width)
		{
			m_imageData[x*4+y*4*m_width+0] = red;
			m_imageData[x*4+y*4*m_width+1] = green;
			m_imageData[x*4+y*4*m_width+2] = blue;
			m_imageData[x*4+y*4*m_width+3] = alpha;
		}
	}
	
	void getPixel(int x, int y, unsigned char& red, unsigned char& green, unsigned char& blue, unsigned char& alpha)
	{
		red = m_imageData[x*4+y*4*m_width+0];
		green = m_imageData[x*4+y*4*m_width+1];
		blue = m_imageData[x*4+y*4*m_width+2];
		alpha = m_imageData[x*4+y*4*m_width+3];
	}
	void uploadImageData();
	
	int getTextureId()
	{
		return m_textureId;
	}
};

#endif //GRAPHING_TEXTURE_H

